2012-02-26 36 views
1

我在我的MySQL數據庫中有兩個表(郵件號碼爲&的客戶),它們都有一個存儲電子郵件地址的列email從兩個獨立表中選擇數據

現在我想選擇這兩個表中的每一行,其中emails.email!=customers.email

當我做了一個簡單的SELECT * FROM emails, customers WHERE emails.email != customers.email,我得到每個emails.email與客戶表中的數據列出。

我該怎麼做?我可以使用DISTINCT,但只將它應用於來自customers表的數據嗎?

+0

這是很不清楚的,你想在這裏。你可以嘗試澄清嗎? – Jivings 2012-02-26 01:46:50

回答

2

如果你想無論是在電子郵件表或客戶表,其中有沒有在電子郵件領域它們之間的比賽,這將這樣的伎倆發現電子郵件地址的唯一列表:

SELECT DISTINCT COALESCE(e.Email, c.Email) as Email 
FROM Emails e FULL OUTER JOIN Customers c ON e.Email = c.Email 
WHERE e.Email IS NULL OR c.Email IS NULL 

巧合的是,這種情況是我發現FULL OUTER JOIN特別有用的極少數情況之一......

+0

使用'SELECT Email FROM Emails UNION SELECT Email FROM Customers'並不簡單嗎,UNION確保沒有重複的結果? – 2012-02-26 02:59:14

+0

@jonathan:你的工會比較簡單,但會在兩個表中返回匹配和不匹配的記錄,而不回答問題。 – Tahbaza 2012-02-26 12:46:17

+0

+1:呃 - 好的! – 2012-02-26 16:02:50

2

一個'不等於'連接很少有用,除非事實上有另一列可以加入平等。所以,如果你在每兩個表的是PersonID列,那麼你可以做:

SELECT m.*, c.* 
    FROM mails AS m 
    JOIN customers AS c ON c.PersonID = m.PersonID 
WHERE c.email != m.email 

但是,如果沒有額外的條件,你有什麼是接近兩個表的笛卡爾乘積,在幾乎每一個一個表中的行幾乎與另一個表中的每一行匹配(因爲不等於條件)。如果沒有不等於條件,結果集只會稍大。