2009-07-03 61 views
0
**Table A** 
1 
2 
3 
4 
5 
6 


**Table B** 
2 
3 
5 

如何選擇僅在表B中存在的條目ID?在這個例子中,我在尋找返回1,4查詢和6MySQL - 如何獲取表B中不存在的值的列表?

+0

什麼是這些值來執行? IDS?提供表格結構實際上會讓我們更容易 – 2009-07-03 14:28:32

+0

對不起,是的,他們是ID。我原本提供了更多的信息,但後來我認爲我只會減少相關的位數。顯然我削得太過分了。 – Eileen 2009-07-03 14:34:29

回答

2

假設列被命名爲 'ID',或者:

SELECT * 
FROM tableA a 
WHERE NOT EXISTS (SELECT 1 FROM tableB WHERE id = a.id) 

SELECT * 
FROM TableA 
WHERE id NOT IN (SELECT id FROM tableB) 

你可能會需要進行測試,看看哪一種最適合。 MySQL可能有點不可預測。

2

嘗試

select value from B where value not in (select value from A) 

獲得B中不在A.值

要獲得相反(在未在B值)使用

select value from A where value not in (select value from B) 
+0

我會很好奇,看看這是如何執行克萊圖提供的答案。我最初的想法是回答他寫的內容,但這不會更快嗎?嗯。 – 2009-07-03 14:28:18

+0

如果表B可以包含NULL值,那麼NOT IN是一個危險的工具,請參閱http://stackoverflow.com/questions/129077/sql-not-in-constraint-and-null-values考慮使用NOT EXISTS。 – Andomar 2009-07-03 14:40:44

0

這避免了IN +子查詢:

SELECT A.value FROM A 
LEFT OUTER JOIN B ON (A.value = B.value) 
WHERE B.value IS NULL 

因爲IN (subquery) isn't optimized,因爲它是在表中每發現行A

相關問題