2010-03-17 20 views
1

我有查詢表中的不返回行不具有在另一[締]表

表的對應值:ARTICLES

ID | CONTENT 
--------------- 
1 | the quick 
2 | brown fox 
3 | jumps over 
4 | the lazy 

表:作家

ID | NAME 
---------- 
1 | paul 
2 | mike 
3 | andy 

表:ARTICLES_TO_WRITERS

ARTICLE_ID | WRITER_ID 
----------------------- 
1   | 1 
2   | 2 
3   | 3 

總之,第4條沒有作家

所以,當我用這個詞文章做一個 「搜索」 「的」

SELECT a.id, a.content, w.name 
FROM articles a, writers w, articles_to_writers atw 
WHERE a.id=atw.article_id AND w.id=atw.writer_id AND content LIKE '%the%' 

第4條不結果顯示

ID | CONTENT | NAME 
----------------------- 
1 | the quick | paul 

即使沒有作家,我如何讓結果仍然出現在結果中?

回答

5

嘗試以下查詢:

SELECT a.id, a.content, w.name 
FROM articles a LEFT JOIN articles_to_writers atw ON a.id = atw.article_id 
    LEFT JOIN writers w ON w.id=atw.writer_id 
WHERE a.content LIKE '%the%' 

原始查詢使用舊的SQL語法創建隱含INNER所有表之間的聯接。 INNER連接要求每個連接的表中都有匹配的記錄。

在上述修訂後的查詢中,表使用LEFT OUTER連接「附加」。這將允許連接左側的記錄出現在最終結果集中,即使作者中沒有匹配的行。來自編寫器的列將具有這些「額外」行的NULL值。

2
SELECT A.ID, A.CONTENT, W.NAME 
FROM 
    ARTICLES A 
    LEFT JOIN ARTICLES_TO_WRITERS ATW ON ATW.ARTICLE_ID = A.ID 
    LEFT JOIN WRITERS W ON W.ID = ATW.WRITER_ID 
WHERE A.CONTENT LIKE '%the%' 
1

在ANSI格式:

SELECT a.id, a.content, w.name 
FROM articles a 
LEFT JOIN articles_to_writers atw on a.id=atw.article_id 
LEFT JOIN writers w on w.id=atw.writer_id 
WHERE 
acontent LIKE '%the%' 

這是一個左連接,這意味着所有的物品將被顯示,即使沒有作家。