一个mysql查询令我烦恼。我有一些javascript,允许用户通过在两个桶(盒子)之间来回移动来分配人员。第一个桶应该是除第二个桶中的所有人(分配给类别)。第二个桶由一个类别中的人组成。因此,我需要一个mysql查询来获取第一个存储桶,除了第二个查询(分配给类别)中提取的所有人之外。
我有一张所有人的桌子和一个分配给类别的人。 (此处还忽略了第三个类别表。)以下代码返回第二个存储桶的选定组(类别中的那些),但是当我希望它包含人员时,第一个存储桶仅将已分配给某个类别的存储库拉出谁甚至没有出现在catpeople表中。
我认为问题与NULL或我的联接有关,但无法解决。非常感谢任何建议:
人
id | name
catpeople
id | catid | peopleid
第一个查询应该拉除除第二个查询中的人以外的所有人,但它只会拉出出现在catpeople表中的人。
$sql1 = "SELECT * FROM `people` c
LEFT JOIN `catpeople` c
on p.id = c.peopleid
WHERE catid <> '2'";
第二个查询工作正常(拉动类别中的人)
$sql2 = "SELECT * FROM `people` p
LEFT JOIN `catpeople` c
on p.id = c.peopleid
WHERE catid = '2'";
答案 0 :(得分:2)
catpeople.catid='2'
WHERE
使JOIN
成为内心。如果您需要所有人将条件移至ON
:
$sql1 = "SELECT * FROM `people` p
LEFT JOIN `catpeople` c
ON (p.id = c.peopleid AND catid <> '2')";
如果我理解你的问题,你需要稍微修改一下这个问题:
$sql1 = "SELECT p.* FROM `people` p
LEFT JOIN `catpeople` c
ON (p.id = c.peopleid AND catid <> '2')"
WHERE c.id IS NULL ; -- I guess c.id is a primary key in catpeople.
--now it returns rows in people table that have no rows
--associated with them in catpeople (or rows with catid =2 or catid is null)
答案 1 :(得分:0)
LEFT JOIN无论如何都会吸引人们。改为使用INNER JOIN:
$sql1 = "SELECT * FROM `people` c
INNER JOIN `catpeople` c
on p.id = c.peopleid AND catid <> 2;