Mysql 想要所有四个部门的人吗
问题是,当我运行代码时,它检查是否有人在部门1工作过,然后停止,但只希望有人在所有四个部门工作过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
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)