SQL SELECT Q - 检索记录

时间:2014-04-09 19:48:35

标签: mysql sql

我有一个表,其中包含由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

我确信有一个非常简单的解决方案,但我没有看到它。

2 个答案:

答案 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`;