簡體   English   中英

MySQL:選擇僅包含兩行並具有特定值的所有行嗎?

[英]MySQL: Select all that only have two rows, with specific values?

我想抓住所有只有兩個角色的用戶,分別是1和4。

一個用戶角色的存儲方式如下:

user_id role_id
54321   1
54321   4
54322   1
54323   1

我如何進行查詢,它抓住了user_id 54321,因為它只有兩個角色,而這兩個是1和4?

我可以使用WHERE role_id IN(1,4),但是這也會抓住具有其他角色的用戶。

WHERE role_id IN (1, 4) GROUP BY user_ID HAVING COUNT(DISTINCT role_id) = 2

http://gregorulm.com/relational-division-in-sql-the-easy-way/

這是組內查詢的示例。 我喜歡來解決這些group byhaving ,因為這是最一般的方法:

select user_id
from user_roles ur
group by user_id
having sum(role_id = 1) > 0 and
       sum(role_id = 4) > 0 and
       sum(role_id not in (1, 4)) = 0;

having子句具有三個條件。 第一個計算該角色為1的次數,如果存在至少一個這樣的角色,則user_id通過。 第二個對4做相同的操作。最后一個檢查是否沒有其他值。

我喜歡這種結構,因為它很靈活。 如果條件是1和4,並且允許其他條件,則只需刪除第三個子句。 如果條件是1或4,沒有其他條件,則看起來像:

having (sum(role_id = 1) > 0 or
        sum(role_id = 4) > 0
       ) and
       sum(role_id not in (1, 4)) = 0;
SELECT u3.user_id
FROM t u1, t u2, t u3
WHERE u1.role_id = 1 AND u2.role_id = 4
 AND u3.user_id = u1.user_id 
 AND u2.user_id = u1.user_id
GROUP BY u3.user_id HAVING COUNT(u3.role_id) = 2;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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