gpt4 book ai didi

MYSQL 查询语法 : left join properly exclude matches

转载 作者:行者123 更新时间:2023-11-29 00:35:01 24 4
gpt4 key购买 nike

我正在尝试正确执行 MYSQL 查询,但它没有按照我的要求进行。

有人员表、任务表和与任务相关联的人员表。这是一个允许用户将人员分配给任务的页面。表具有 userid 字段,因为不同的用户正在与不同的人员和/或任务组一起工作。对于每个任务,我想填充用户可以分配给任务的人员列表,不包括任何已分配的人员。

表格如下:人

id|person|userid

任务

id|task|userid

任务者

id|personid|taskid

我正在处理的查询是:

SELECT p.*,p.id as pid 
FROM `people` p
LEFT JOIN `taskperson` tp
on p.id = tp.personid
WHERE p.person LIKE '%$str%' AND p.userid = '1'AND tp.personid NOT IN
(SELECT tp.personid FROM `taskperson` tp WHERE userid = '1' AND tp.taskid = '33' )
GROUP BY p.id

如果您删除 NOT IN 子句,它将为您提供人员列表,但不会排除已分配的人员。

如果包含 NOT IN 子句,当表中没有行时,相关用户的 taskperson,即没有人被分配给任务,它不会显示任何人,即返回零行。在这种情况下,它应该显示所有人。

谁能看出我需要更改的地方?

谢谢你的建议

最佳答案

我想你需要IS NULL

SELECT p.*,p.id as pid 
FROM `people` p
LEFT JOIN `taskperson` tp
on p.id = tp.personid
WHERE p.person LIKE '%$str%' AND p.userid = '1' AND tp.personid IS NULL
GROUP BY p.id

从您删除 NOT IN 子句来看,这将排除已分配的人员。 WHERE tp.personid IS NULL 将仅显示那些在 LEFT JOIN 中没有匹配项的人。

关于MYSQL 查询语法 : left join properly exclude matches,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14749677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com