2016-08-01 155 views
-1

我正在處理一個mysql查詢需求。檢查mysql表中是否存在不存在的記錄

有一個表詳細以下細節

Id Emails 

1 [email protected] 
2 [email protected] 
3 [email protected] 
4 [email protected] 
5 [email protected] 
6 [email protected] 
7 [email protected] 
8 [email protected] 
9 [email protected] 
10 [email protected] 

它是一種非常巨大的表,但我展示你作爲一個示例表

有時候,我收到的電子郵件的列表,以檢查它們的存在,在詳細表。

讓說,如果我得到的電子郵件ID的喜歡[email protected][email protected][email protected]

我想是在不存在輸出給出了三個電子郵件的郵件列表在要求檢查即[email protected]

將是查詢檢查內容電子郵件的ID沒有在表中的細節存在出給定的要求(ab​​[email protected][email protected][email protected]

謝謝提前!

+0

你只是問什麼'哪裏'標準適用?你有什麼嘗試?也許看看用'不在'... – sgeddes

+0

歡迎來到SO。 請閱讀[我可以問哪些主題](http://stackoverflow.com/help/on-topic) 和[如何提出一個好問題](http://stackoverflow.com/help/how-to - 問) 和[完美的問題](http://codeblog.jonskeet。英國/ 2010/8月29日/寫最完美的 - 問題/) 和[如何創建一個最小的,完整的和可驗證的示例](http://stackoverflow.com/help/mcve) SO是**不是免費的編碼或代碼轉換或調試或教程或圖書館查找服務**你也可以表明你已經取得了一些努力來解決你自己的問題。 – RiggsFolly

+0

@RiggsFolly,更新的問題,現在我希望它與複雜清除我期待要解決的! :) – Kate

回答

0

在SQL結果中獲取不存在的東西是非常棘手的,因爲爲了出現在結果集中,某個項必須存在於某處(作爲列中的值或作爲硬編碼值該查詢,或者作爲從其中一個導出的的值)。由於您想獲得包含不會出現在表中的值的結果集,因此您需要執行多個查詢。幸運的是,你可以嵌套它們。

select addr, Emails from 
    (select '[email protected]' as addr 
    union select '[email protected]' as addr 
    union select '[email protected]' as addr) as fd 
left outer join Details on Details.Emails = fd.addr 
having Emails IS NULL 

我們做了一堆的union -ed select s到建立的搜索的價值「表」。然後,我們將該表加入Details表,並且只保留加入失敗的行(加入的表爲NULL)。

See the SQL Fiddle

1

最簡單的方法來做到這一點是:

SELECT * FROM {yourTable} WHERE eMails="the email address" 

或者多個:

SELECT * FROM {yourTable} 
WHERE eMails IN ({comma separated and quoted list of email addresses}) 

如果返回零個記錄,電子郵件地址不存在。

一個限制:根據您的DBMS設置,IN語句限制爲最大數量的值。保重你不要超過這個,否則你會得到一個錯誤或沒有有效的迴應。

如果您使用真正的長列表,然後將它們插入到臨時表中並將該表與基表連接以獲取未使用的列表。

+0

這個邏輯我知道寫你的代碼,但我想是不存在的輸出了在要求給出的三封郵件的檢查,即ZZZ郵件列表@ mail.com! – Kate

+0

您將不得不添加一個檢查循環或使用臨時表解決方案。使用臨時表,您可以使用'LEFT JOIN'和'WHERE temptable.value IS NOT NULL'來保留不存在的值。 –

+0

你不能只使用'NOT IN({逗號分隔和引用的電子郵件地址列表}) – RiggsFolly