MySQL中的减号运算符?

Posted

技术标签:

【中文标题】MySQL中的减号运算符?【英文标题】:MINUS operator in MySQL? 【发布时间】:2011-12-05 13:48:36 【问题描述】:

我有一些表格可以用来接收电子邮件。而且我不想收到表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 无效吗?

【问题讨论】:

MINUS in MySQL?的可能重复 想指出问题中的 SQL 在 MySQL 中是有效的。 SQL 中也没有“MINUS”,但问题是关于 MINUS(MySQL 不支持,如下所述),这相当令人困惑...... 【参考方案1】:

这里可以使用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)

【讨论】:

@AssamGuy 见上面的补充。 显示DB Error. Unknown column 'email' in 'field list' SELECT email FROM ( 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 ) email_list WHERE EMAIL NOT IN (SELECT un_email FROM tbl_unsubscribe) @AssamGuy 忘记了每个 UNION 组件中的别名 AS email。请参阅上面的更改。【参考方案2】:

不幸的是,MINUSINTERSECT 不受 MySQL 支持,但您可以使用 JOINMINUS 获得相同的结果,UNIONINTERSECT

SELECT cand_email FROM tbl_cand_data
LEFT JOIN tbl_unsubscribe ON (cand_email = un_email)
WHERE un_email IS NULL

【讨论】:

谢谢达哈泽。我会用它 +1 你在我完成加入之前完成了 JOIN 版本。 这是一个很好的解决方案。由于 MySQL 5 的错误 (***.com/questions/3417074/…),在子查询中使用 IN/NOT IN 非常慢

以上是关于MySQL中的减号运算符?的主要内容,如果未能解决你的问题,请参考以下文章

初探运算符重载------(减号)

PL/SQL 插入使用多个选择和减号运算符

如何解决操作数数据类型 nvarchar 对减号运算符无效

计算表达式的值并输出,表达式由若干个数字和运算符(只包含加号和减号)构成

在python中能使用加号和减号来连接和删除字符串吗?

php-jquery-json-3