我有一个表,其中包含由projectid列和user_assignment列表示的项目分配,其中包含用户的唯一用户ID。如果用户在与项目ID关联的用户分配表中具有记录,则将其分配给项目。我想要检索未分配特定用户的所有项目而不获取重复记录,因为有许多用户已分配给项目。
虽然这些示例每个项目只会检索一条记录,但它会返回用户'abc123'所在且未分配给的项目。我需要检索未分配用户的项目ID。
SELECT DISTINCT `propid`
FROM `user_assignments`
WHERE `userid` <> 'abc123'
ORDER BY `propid` ASC
SELECT DISTINCT `propid`
FROM `user_assignments`
WHERE (`userid` <> 'abc123')
ORDER BY `propid` ASC
我确信有一个非常简单的解决方案,但我没有看到它。
答案 0 :(得分:0)
我认为您需要的是以下查询。
SELECT DISTINCT `propid`
FROM `user_assignments`
WHERE `propid` NOT IN (SELECT `propid`
FROM `user_assignments`
WHERE `userid` = 'abc123')
ORDER BY `propid`
查询获取与特定用户关联的所有项目,然后获取与之无关的项目。
编辑:您还可以尝试以下内容
SELECT DISTINCT o.`propid`
FROM `user_assignments` as o
WHERE NOT EXISTS (SELECT 1 FROM `user_assignments` as i
WHERE `userid` = 'abc123'
AND i.`propid` = o.`propid`)
或者您可以使用JOIN来实现此目的
SELECT DISTINCT o.`propid`
FROM `user_assignments` as o
LEFT JOIN `user_assignments` as i
ON i.`propid` = o.`propid` AND i.`userid` = 'abc123'
WHERE i.`propid` IS NULL
答案 1 :(得分:0)
以下查询可能会为您解决问题。
SELECT DISTINCT `propid`
FROM `user_assignments` ua1
WHERE NOT EXISTS
(SELECT 1
FROM `user_assignments` ua2
WHERE ua1.propid = ua2.propid
AND ua1.`userid` = 'abc123')
ORDER BY `propid`;