Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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,问题是,当我运行代码时,它检查是否有人在部门1工作过,然后停止,但只希望有人在所有四个部门工作过 SELECT p.person_id AS ID, CONCAT(p.firstname, " ", p.surname) AS 'Employee Name' FROM person AS p, allocation_to_department AS ad WHERE ad.person_id = p.person_id AND ad.depart

问题是,当我运行代码时,它检查是否有人在部门1工作过,然后停止,但只希望有人在所有四个部门工作过

SELECT
    p.person_id AS ID,
    CONCAT(p.firstname, " ", p.surname) AS 'Employee Name'
FROM
    person AS p, 
    allocation_to_department AS ad
WHERE
    ad.person_id = p.person_id
    AND ad.department_id= ('1,2,3,4')

您可以通过对连接的表进行分组并仅选择包含所有4个部门id的行来完成此操作:

SELECT
  p.person_id AS ID,
  CONCAT(p.firstname, ' ', p.surname) AS `Employee Name`
FROM person AS p inner join allocation_to_department AS ad
on ad.person_id = p.person_id 
where ad.department_id in (1, 2, 3, 4)
group by ID, `Employee Name`
having count(*) = 4

这是一个聚合查询,将返回属于所有4个部门(id 1到4)的人员:

另一种解决方案是在子句中使用
计数(不同的…)

注意:始终使用显式连接,而不是老式的隐式连接。我相应地修改了查询。

试试这个

SELECT p.person_id AS ID, CONCAT(p.firstname, " ", p.surname) AS 'Employee Name'
FROM person AS p, allocation_to_department AS ad
WHERE
ad.person_id = p.person_id 
AND
ad.department_id in (1,2,3,4)

“它检查是否有人在第一部门,然后停止”……不,它检查是否有人在第一部门或第二部门或第三部门或第四部门。这就是
中的
所做的-这只是编写大量ORs的一种简单方法,您可以在任何SQL手册中阅读
SELECT
    p.person_id AS ID,
    CONCAT(p.firstname, " ", p.surname) AS 'Employee Name'
FROM
     person AS p
     INNER JOIN allocation_to_department AS ad
         ON ad.person_id = p.person_id
         AND ad.department_id IN (1, 2, 3, 4)
GROUP BY 
    p.person_id, 
    p.first_name, 
    p.surname
HAVING
    COUNT(DISTINCT ad.department_id) = 4
SELECT p.person_id AS ID, CONCAT(p.firstname, " ", p.surname) AS 'Employee Name'
FROM person AS p, allocation_to_department AS ad
WHERE
ad.person_id = p.person_id 
AND
ad.department_id in (1,2,3,4)