2016-09-17 61 views
0

我想加入3個表在一起SELECT查詢與一些WHERE子句。 表1是與表2和表2是與表3加入3個表與不同的FKs

的表如下所示:

Author 
PK: Author_ID 
FK: Location_ID 
Author_First_Name 

Location 
PK: Location_ID 
City 

Articles 
PK: Article_ID 
FK: Author_ID 
Article_Name 

到目前爲止,我已經把這個查詢,但我有麻煩確定如何加入第二外鍵「LOCATION_ID」

SELECT 
    Articles.Article_Name 
FROM 
    Articles 
     INNER JOIN Author 
      ON Articles.Author_ID 
     INNER JOIN Location 
      ON 
WHERE Author.Author_First_Name='Sam' 
AND Location.City<>'Detroit' 

回答

1

正確的語法是這樣的:

SELECT a.Article_Name 
FROM Articles a INNER JOIN 
    Author au 
    ON a.Author_ID = au.Author_ID INNER JOIN 
    Location l 
    ON l.Location_ID = au.Location_Id 
WHERE au.First_Name = 'Sam' AND l.City <> 'Detroit'; 

請注意,使用表別名可以使查詢更易於編寫和讀取。另外,您需要連接ON子句的兩個表的條​​件。

+0

好,LOCATION_ID只在作者表的外鍵引用。 這是否意味着它必須連接到作者表?如果是這樣,那麼從文章表中選擇的原始文件是否仍然有效? – milesg

+0

@milesg。 。 。我看到你的問題,但忽略了刪除評論。 –

+0

謝謝,我想我現在已經明白了。最後一個問題是:內部連接的好用,還是另一種連接類型會有好處?我的理解是這樣,如果沒有城市,它會被過濾掉。 – milesg

0

你忘了比較表中的字段

SELECT * FROM articles ar 
LEFT JOIN author a ON ar.author_id = a.author_id 
LEFT JOIN location l ON a.location_id = l.location_id 
WHERE a.author_first_name = 'Sam' AND l.city <> 'Detroit' 
+0

使用LEFT JOIN有什麼好處? – milesg

+0

使用內部聯接,如果在特定文章上有空位置,則此查詢不會返回此文章。使用左連接可以獲得所有文章,甚至那些位置爲空的文章。 –

+1

@Jaoao Punho是對的。無論作者或地點是否可用,對文章使用左連接都會爲您提供所有文章。 – user2040021