MySQL中的MINUS运算符?

时间:2011-12-05 13:48:37

标签: php mysql

我有一些表格,我收到了电子邮件。我不想在表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无效吗?

2 个答案:

答案 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