为啥在使用 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 EXISTS
或 NOT 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 对我的查询不起作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Salt之CentOS7.5使用RPM包安装MySQL5.7.22