2016-07-29 58 views
2

兩個表這是我的查詢:MySQL的加入兩個地方

SELECT a.id, a.hostname, a.asset_tag, d.model, b.location, 
     c.type, a.earmarked, a.earmarked_office, a.earmarked_user, 
     a.earmarked_date, a.earmarked_by 
     FROM laptops a 
     JOIN locations b ON a.location = b.id 
     JOIN types c ON a.type = c.id 
     JOIN models d ON a.model = d.id 
     WHERE b.stock = 1 

現在,a.earmarked_office場實際上是在locations表中的ID,這是我們已經在使用,填補了b.location參考。我怎樣才能在相同的聲明中檢索earmarked_office的實際位置名稱?

回答

3

加入表兩次:

SELECT lt.id, lt.hostname, lt.asset_tag, d.model, l.location, 
     c.type, lt.earmarked, lt.earmarked_office, lt.earmarked_user, 
     lt.earmarked_date, lt.earmarked_by, 
     lteo.?? 
FROM laptops lt JOIN 
    locations l 
    ON lt.location = l.id JOIN 
    types t 
    ON lt.type = t.id JOIN 
    models m 
    ON lt.model = m.id JOIN 
    locations leo 
    ON lt.earmarked_office = leo.id 
WHERE l.stock = 1; 

注:

  • 使用表的別名是好的。但是,使用表別名可以更輕鬆地遵循查詢的邏輯。
  • 我不知道你想從第二張表中得到什麼列。
  • 使用as重命名列,因此它們不會列已經從l未來衝突。
  • 如果存在不匹配的值,則可能需要LEFT JOIN
+0

謝謝 - 我現在就買下。 – daninthemix

0

您可以加入同一個表多次:

SELECT a.id, a.hostname, a.asset_tag, d.model, b.location, 
     c.type, a.earmarked, a.earmarked_office, a.earmarked_user, 
     a.earmarked_date, a.earmarked_by 
     FROM laptops a 
     JOIN locations b ON a.location = b.id 
     JOIN types c ON a.type = c.id 
     JOIN models d ON a.model = d.id 
     JOIN locations e ON a.earmarked_office = e.id 
     WHERE b.stock = 1 
+0

@daninthemix您必須首先提供您想要的地點'地點'。我放棄了給我一個隨機的名字,就像我在最後一次「join」中爲locations.id所做的那樣 –