2016-07-29 7 views
2

で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フィールドは、実際に我々はすでにb.locationを埋めるために使用しているlocationsテーブル内のIDへの参照です。同じステートメントで、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; 

注意:表の別名を使用して

  • が良いです。ただし、テーブルのエイリアスを使用すると、クエリのロジックに従うのが簡単になります。
  • 2番目のテーブルから必要な列がわかりません。
  • 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'のためにしたのと同じように、私はランダムな名前を与えました。 –