我有一些表格,我收到了电子邮件。我不想在表tbl_unsubscribe
中收到电子邮件。我写了这样的查询:
SELECT cand_email FROM tbl_cand_data
UNION
SELECT emp_email FROM tbl_emp_data
UNION
SELECT email FROM tbl_uptade_list
UNION
SELECT feed_email FROM tbl_feedback
UNION
SELECT admin_email FROM tbl_admin_emails
但我收到语法错误。 MINUS
运算符对MySQL无效吗?
答案 0 :(得分:23)
此处可以使用NOT IN()
子查询,因为MySQL不支持MINUS
。
SELECT
cand_email
FROM tbl_cand_data
WHERE can_email NOT IN (SELECT un_email FROM tbl_unsubscribe)
也可以使用LEFT JOIN
来完成,在un_email
列中查找NULL:
SELECT cand_email
FROM
tbl_cand_data
LEFT JOIN tbl_unsubscribe ON tbl_cand_data.can_email = tbl_unsubscribe.un_email
WHERE tbl_unsubscribe.un_email IS NULL
要从一堆UNION
操作中排除它们,请将UNION
组作为子查询包装在()
中:
SELECT email FROM (
SELECT cand_email AS email FROM tbl_cand_data
UNION
SELECT emp_email AS email FROM tbl_emp_data
UNION
SELECT email FROM AS email tbl_uptade_list
UNION
SELECT feed_email AS email FROM tbl_feedback
UNION
SELECT admin_email AS email FROM tbl_admin_emails
) email_list
WHERE email NOT IN (SELECT un_email FROM tbl_unsubscribe)
答案 1 :(得分:6)
不幸的是,MySQL不支持MINUS和INTERSECT,但是你可以使用join获得相同的结果(对于减号; union用于交叉)
SELECT cand_email FROM tbl_cand_data
LEFT JOIN tbl_unsubscribe ON (cand_email = un_email)
WHERE un_email IS NULL