我有兩個表record
和share
。 record
具有列:name
和id
。 share
有專欄id
。如何使用sql join其中table1的行不在表2中
我想查找出現在record
中但不存在於share
中的行。
我該怎麼做?
我有兩個表record
和share
。 record
具有列:name
和id
。 share
有專欄id
。如何使用sql join其中table1的行不在表2中
我想查找出現在record
中但不存在於share
中的行。
我該怎麼做?
SQL LEFT JOIN返回的所有行左表中即使有右表中沒有匹配
SELECT name, id
FROM record r LEFT JOIN share s on r.id = s.id
WHERE s.id is null
你有這樣的表: 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)。
選擇ID從t1其中id不從RECORD其中ID未在(SELECT DISTINCT ID FROM SHARE)(選擇來自T2 ID)
SELECT *;
SELECT DISTINCT ID從股票交易 - 將得到所有不同的ID在表中的份額
SELECT * FROM記錄下ID不在(SELECT DISTINCT ID FROM SHARE);將顯示其ID不在第一個查詢中的所有記錄。
非常感謝你解釋它。它真的幫助我很多。 – riyana 2010-11-29 07:01:11