2010-11-28 91 views

回答

2

SQL LEFT JOIN返回的所有行左表中即使有右表中沒有匹配

SELECT name, id 
FROM record r LEFT JOIN share s on r.id = s.id 
WHERE s.id is null 
2

你有這樣的表: RECORD(ID,姓名) SHARE(ID,VALUE)

如果SQL引擎支持左外連接,最好的辦法是:

SELECT RECORD.* FROM RECORD LEFT OUTER JOIN SHARE WHERE RECORD.ID=SHARE.ID 
WHERE SHARE.ID IS NULL 

重要
發生在SHARE.ID

指數它是如何工作:
SQL引擎跨度所有記錄表尋找SHARE的記錄,在記錄中的每個記錄,如果發現在共享一個「鏈接」紀錄where子句失敗,所以記錄不包含在結果集中,如果在共享where子句爲真並且RECORD。*包含在結果集中沒有找到記錄。這工作得益於LEFT OUTER JOIN。

注意:
做同樣的事情的另一種方法是使用WHERE RECORD.ID NOT IN(SELECT ID FROM SHARE)。 請注意,根據您使用的sql引擎,這可能會導致嚴重的性能問題,因爲內部引擎可以在RECORD表中爲每條記錄運行一次(SELECT ID FROM SHARE)。

+0

非常感謝你解釋它。它真的幫助我很多。 – riyana 2010-11-29 07:01:11

1

選擇ID從t1其中id不從RECORD其中ID未在(SELECT DISTINCT ID FROM SHARE)(選擇來自T2 ID)

0

SELECT *;

SELECT DISTINCT ID從股票交易 - 將得到所有不同的ID在表中的份額

SELECT * FROM記錄下ID不在(SELECT DISTINCT ID FROM SHARE);將顯示其ID不在第一個查詢中的所有記錄。

相關問題