2016-11-10 105 views
1

我需要檢查MySQL表中的行是否包含存儲在另一個表中的值。MySQL檢查行是否包含來自另一個表的值

這就是我想現在:

SELECT * FROM table1 WHERE NOT EXISTS (SELECT * FROM table2 WHERE Column = '%'); 

這仍然發現其中的確包含在第二個表中的值的行。我也嘗試交換EXETS LIKE和IN,它們都返回語法錯誤。

編輯:

使用%Sign似乎會導致問題。下面是我使用百分號會發生什麼一些截圖: enter image description here

一個存儲在第二表中的值是「米斯」,載「米斯」行仍處於選中狀態。如果我想補充的,而不是「%」米斯',那麼該行不會返回: enter image description here

+0

你需要指定兩個表之間的關係代替第二線。 –

+0

您在table1和table2之間檢查的列的名稱是什麼? – Sam07

+0

@Sam這個列被稱爲縣,對不起,我只是把例子的通用名稱 – Edward144

回答

1
SELECT * FROM table1 a 
WHERE a.County NOT IN(SELECT County FROM table2) 

這應該符合你想要的。

編輯:如果你只需要忽略從表2特定的值,你可以用這個

WHERE a.County NOT IN(SELECT County FROM table2 WHERE County IN('county1', 'county2')) 
+0

完美的工作,你能解釋一下'a'是什麼,它只是一個可能是任何價值的變量嗎? – Edward144

+0

你並不真的需要這些,這只是我的習慣。 'FROM table1 a'使'a'成爲一種別名(我不知道適當的名詞),你可以在其餘的查詢中使用它。你在哪裏看到'a.County',就像說'table1.County'一樣。這對使用具有相同列名的表的查詢很有幫助。 – Sam07

+0

原來它實際上叫做別名,哈哈。這可能會有幫助,如果我的解釋不是:[鏈接](https://en.wikipedia.org/wiki/Alias_(SQL)) – Sam07

0

您需要定義某種這兩個查詢之間的關係,例如

SELECT * FROM table1 
WHERE NOT EXISTS (SELECT * 
        FROM table2 
        WHERE Column = '%' 
        AND table1.Column = table2.Column); --<-- Relate two queries 

返回的每個行從外部查詢將檢查你在內部查詢的where子句中定義的條件,這涉及兩個查詢,否則MySQL無法知道如何檢查外部查詢返回的每一行的存在,它會什麼都沒有回來。

+0

這還是返回包含第二個表中值的行。只有在使用%符號時,如果我將其更改爲行所具有的特定值,那麼它不會顯示出來,有什麼想法? – Edward144

+0

@ Edward144那麼解釋第二個表中存在的行是什麼意思?換句話說,你如何確定一個行是否存在於第二個表中? –

+0

我已經使用屏幕截圖更新了我的帖子,以顯示發生了什麼。我迷惑了一下自己,我認爲 – Edward144

0
SELECT * FROM table1 
WHERE column NOT IN (SELECT column FROM table2 
       WHERE Column = '%'); 
相關問題