为啥在使用 mysql server 5.7.22 时 EXCEPT 对我的查询不起作用? [复制]

Posted

技术标签:

【中文标题】为啥在使用 mysql server 5.7.22 时 EXCEPT 对我的查询不起作用? [复制]【英文标题】:Why won't EXCEPT work for my query when using mysql server 5.7.22? [duplicate]为什么在使用 mysql server 5.7.22 时 EXCEPT 对我的查询不起作用? [复制] 【发布时间】:2018-07-29 20:35:10 【问题描述】:

所以我正在努力寻找那些销售笔记本电脑但不销售 PC 的制造商。

提供的关系模式是: 产品(制造商、型号、类型), PC(型号,速度,内存,硬盘,价格), 笔记本电脑(型号、速度、内存、硬盘、屏幕、价格)和 打印机(型号、颜色、类型、价格)

我试过了:

 (SELECT DISTINCT maker
 FROM Product P
 WHERE P.type=’Laptop’)
 EXCEPT
 (SELECT DISTINCT maker
 FROM Product P
 WHERE P.type=’PC’);

但我收到以下错误:

错误代码:1064。您的 SQL 语法有错误;检查 与您的 mysql 服务器版本相对应的手册 'EXCEPT (SELECT DISTINCT maker FROM Product P WHERE) 附近使用的语法 P.type='PC')' 在第 4 行

我在这里做错了什么?查询中的 EXCEPT 在 MySQL Workbench 中带有红色下划线。

【问题讨论】:

MySQL 中没有EXCEPT。尝试 NOT EXISTSNOT IN 子查询。 当我尝试用 NOT EXISTS 或 NOT IN 代替 EXCEPT 时,NOT 带有红色下划线,因此我无法运行任何一个查询。 我使用了 EXCEPT,因为它应该等同于差异,或者至少是一次。任何人都知道这些天用于差异的东西是什么? 正如保罗所写:使用不存在或不在代替。 【参考方案1】:

据我所知 MySQL 不支持 EXCEPT 语法。尝试使用 NOT IN 或 LEFT JOIN:

(SELECT DISTINCT maker
FROM Product P
WHERE P.type=’Laptop’)
where marker not in
(SELECT DISTINCT maker
FROM Product P
WHERE P.type=’PC’);

【讨论】:

【参考方案2】:

正如@paul 所说,没有

除了

在 MySQL 中。 此外,根据您的数据库设计,您不需要其他子查询。

SELECT DISTINCT maker FROM Product P WHERE P.type=’Laptop’

这将自动仅选择“笔记本电脑”而非“PC”的产品类型。这完全取决于您设计数据库的效率。

【讨论】:

以上是关于为啥在使用 mysql server 5.7.22 时 EXCEPT 对我的查询不起作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

mysql-5.7.22的安装和问题总结

MySQL 5.7.22 二进制安装

Salt之CentOS7.5使用RPM包安装MySQL5.7.22

MySQL案例 | consider increasing server sort buffer

mysql 5.6升级到5.7.22

linux安装mysql