我正在使用MySQL。这是我的架构:
供应商(sid:整数,sname:字符串,地址字符串)
零件(pid:整数,pname:字符串,color:字符串)
目录(sid:整数,pid:整数,成本:实数)
(主键以粗体显示)
我正在尝试编写查询以选择至少两个供应商制造的所有零件:
-- Find the pids of parts supplied by at least two different suppliers. SELECT c1.pid -- select the pid FROM Catalog AS c1 -- from the Catalog table WHERE c1.pid IN ( -- where that pid is in the set: SELECT c2.pid -- of pids FROM Catalog AS c2 -- from catalog WHERE c2.pid = c1.pid AND COUNT(c2.sid) >= 2 -- where there are at least two corresponding sids ); 首先,我什至会以正确的方式这样做吗?
其次,我得到这个错误:
1111-无效使用组功能
我究竟做错了什么?
您需要使用HAVING,不WHERE。
区别在于:该WHERE子句过滤MySQL选择的行。然后, MySQL将这些行分组在一起,并为您的COUNT函数汇总数字。
HAVING就像是WHERE,只有它发生后,该COUNT值已经计算出来,所以你希望它会工作。将子查询重写为:
( -- where that pid is in the set: SELECT c2.pid -- of pids FROM Catalog AS c2 -- from catalog WHERE c2.pid = c1.pid HAVING COUNT(c2.sid) >= 2)来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。