MySQL中的MINUS运算符?

Ass*_*Guy 15 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    
Run Code Online (Sandbox Code Playgroud)

但我收到语法错误.是MINUS运营商无效为MySQL?

Mic*_*ski 24

一个NOT IN()子查询可以在这里使用,因为MySQL不支持MINUS.

SELECT 
  cand_email
FROM tbl_cand_data 
WHERE can_email NOT IN (SELECT un_email FROM tbl_unsubscribe)
Run Code Online (Sandbox Code Playgroud)

也可以使用a来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
Run Code Online (Sandbox Code Playgroud)

要将它们从一堆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)
Run Code Online (Sandbox Code Playgroud)


Max*_*sky 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
Run Code Online (Sandbox Code Playgroud)