我的MySQL数据库中有两个表(MAILS和客户)都有一个存储电子邮件地址的列email
。
现在我想从emails.email!=customers.email
这两个表中选择每一行。
当我做一个简单的SELECT * FROM emails, customers WHERE emails.email != customers.email
时,我会使用customers表中的数据列出每个emails.email。
我该怎么做?我可以使用DISTINCT但仅将其应用于来自customers表的数据吗?
答案 0 :(得分:2)
'not-equals'连接很少有用,除非实际上有另一列可以为了相等而连接。因此,如果两个表中的每个表都有PersonID列,则可以执行以下操作:
SELECT m.*, c.*
FROM mails AS m
JOIN customers AS c ON c.PersonID = m.PersonID
WHERE c.email != m.email
但如果没有这个额外条件,你就会得到两个表中笛卡尔积的近似值,其中一个表中的几乎每一行都与另一个表中的几乎每一行匹配(因为不等于条件)。如果没有非等于条件,结果集只会略大一些。
答案 1 :(得分: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特别有用的极少数情况之一......