Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 找到从事多个项目的男性员工_Mysql_Sql_Phpmyadmin - Fatal编程技术网

Mysql 找到从事多个项目的男性员工

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

我有以下模式:

员工(fname、lname、e_编号、年龄、地址、性别、国籍、部门编号)

D部门(部门名称、部门编号、部门位置)

项目(名称、编号、位置、部门编号)

工作时间(e_编号、p编号、小时数)

需要找到在多个项目上工作的男性员工的姓名。我创建了以下sql语句。但它不起作用。我的错误是什么?如何修复它

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