Mysql 找到从事多个项目的男性员工
我有以下模式: 员工(fname、lname、e_编号、年龄、地址、性别、国籍、部门编号) D部门(部门名称、部门编号、部门位置) 项目(名称、编号、位置、部门编号) 工作时间(e_编号、p编号、小时数) 需要找到在多个项目上工作的男性员工的姓名。我创建了以下sql语句。但它不起作用。我的错误是什么?如何修复它Mysql 找到从事多个项目的男性员工,mysql,sql,phpmyadmin,Mysql,Sql,Phpmyadmin,我有以下模式: 员工(fname、lname、e_编号、年龄、地址、性别、国籍、部门编号) D部门(部门名称、部门编号、部门位置) 项目(名称、编号、位置、部门编号) 工作时间(e_编号、p编号、小时数) 需要找到在多个项目上工作的男性员工的姓名。我创建了以下sql语句。但它不起作用。我的错误是什么?如何修复它 SELECT `fname`,`lname` FROM `employee`,`works_on` ON`employee.`e_no`=`works_on`.`e_no` WHER
SELECT `fname`,`lname`
FROM `employee`,`works_on`
ON`employee.`e_no`=`works_on`.`e_no`
WHERE `employee`.`sex`='male'
GROUP BY `employee`.`e_no`
HAVING COUNT(works_on.e_no)>1;
在
HAVING
子句中,您应该通过pnumber
而不是e\u no
进行测试:
SELECT fname, lname
FROM employee
JOIN works_on
ON employee.e_no = works_on.e_no
WHERE employee.sex = 'male'
GROUP BY fname, lname
HAVING COUNT(DISTINCT works_on.pnumber) > 1;
注意:您应该使用显式连接语法而不是旧式隐式语法。另一种方法:
select t.fname, t.lname from employee t
where t.sex = 'male' and t.e_no in (select e_no from works_on)
您可以在加入之前进行聚合,这应该更有效(关于
sex
的条件不是很有选择性):
如果(e_no,pnumber)
的组合不是唯一的:
HAVING COUNT(DISTINCT pnumber) > 1
语法错误(逗号而不是JOIN关键字)、无效的分组依据等。当运行sql时,我收到此错误:#1064-您的sql语法有错误;查看与MySQL服务器版本对应的手册,了解使用near'ON
employee
e\u no
e\u no
的正确语法,其中employee
sex
='male'GROUP BY'f'在第1行是..tnanks..它现在可以工作了..你能解释一下having子句吗..为什么应该是“pnumber”,为什么不“e_no”?@AL-zami更安全。假设您有(e_no,pnumber)=(1,10),(1,10)
计数(DISTINCT works_on.pnumber)返回1,而计数(works_on.e_no)
返回2。
HAVING COUNT(DISTINCT pnumber) > 1