[英]SQL SELECT Q - Retrieving Records
我有一个表,其中包含由projectid列和user_assignment列表示的项目分配,其中user_assignment列包含用户的唯一userid。 如果用户在用户分配表中有与项目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
我敢肯定有一个非常简单的解决方案,但我没有看到。
我认为您需要的是以下查询。
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
以下查询可能会为您解决问题。
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`;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.