簡體   English   中英

SQL SELECT Q-檢索記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM