簡體   English   中英

在表中找到兩個具有相同值的記錄

[英]Find two records in the table that have the same value

我有一張桌子b_im_message 它具有列idchat_iduser_id 我無法創建查詢,因此在“ user_id”列中有3或4個值,在chat_id列中有兩個條目。 很難描述。 我將舉一個例子。

初始表視圖

mysql> select id, chat_id, user_id from b_im_relation;
+----+---------+---------+
| id | chat_id | user_id |
+----+---------+---------+
| 11 |       6 |       1 |
| 12 |       6 |       3 |
| 13 |       7 |       1 |
| 14 |       7 |       4 |
| 16 |       8 |       1 |
| 15 |       8 |       3 |
| 18 |       9 |       1 |
| 17 |       9 |       4 |
| 19 |      10 |       3 |
| 20 |      11 |       3 |
| 21 |      11 |       4 |
+----+---------+---------+
11 rows in set (0.00 sec)

選擇值為3或4的行以及任何“ chat_id”

mysql> SELECT id, chat_id, user_id 
       FROM b_im_relation 
       WHERE user_id IN (3,4) and  
             EXISTS(SELECT id, chat_id, user_id 
                    FROM b_im_relation t1 
                    WHERE EXISTS (SELECT 1 
                                  FROM b_im_relation t2 
                                  WHERE t1.chat_id=t2.chat_id and 
                                  t1.id<>t2.id));
+----+---------+---------+
| id | chat_id | user_id |
+----+---------+---------+
| 12 |       6 |       3 |
| 15 |       8 |       3 |
| 19 |      10 |       3 |
| 20 |      11 |       3 |
| 14 |       7 |       4 |
| 17 |       9 |       4 |
| 21 |      11 |       4 |
+----+---------+---------+
7 rows in set (0.00 sec)

選定的對“ chat_id”

mysql> SELECT id, chat_id, user_id 
       FROM b_im_relation t1 
       WHERE EXISTS (SELECT 1 FROM b_im_relation t2 
                     WHERE t1.chat_id=t2.chat_id and 
                              t1.id<>t2.id) and 
             EXISTS (SELECT id, chat_id, user_id 
                     FROM b_im_relation 
                     WHERE user_id in (3,4));
+----+---------+---------+
| id | chat_id | user_id |
+----+---------+---------+
| 11 |       6 |       1 |
| 12 |       6 |       3 |
| 13 |       7 |       1 |
| 14 |       7 |       4 |
| 16 |       8 |       1 |
| 15 |       8 |       3 |
| 18 |       9 |       1 |
| 17 |       9 |       4 |
| 20 |      11 |       3 |
| 21 |      11 |       4 |
+----+---------+---------+

我需要這個:

+----+---------+---------+
| id | chat_id | user_id |
+----+---------+---------+
| 20 |      11 |       3 |
| 21 |      11 |       4 |
+----+---------+---------+

任何值“ id”,任何相同值“ cat_id”以及“ user_id”中的“ 3”或“ 4”

查找具有多個記錄的所有用戶/聊天組合,然后加入以獲得所有此類記錄:

select id, chat_id, user_id
from (
    select chat_id, user_id
    from b_im_relation
    where user_id in (3,4)
    group by chat_id, user_id
    having count(*) > 1
) multiple_chats
natural join b_im_relation

如果要使用chat_id ,其中user_id 3和4位於:

select i.*
from b_im_relation i inner join (
    select chat_id
    from b_im_relation
    where user_id in (3,4)
    group by chat_id
    having count(distinct user_id) = 2
) t on t.chat_id = i.chat_id

如果要在chat_id中僅存在user_id 3和4:

select i.*
from b_im_relation i inner join (
    select chat_id
    from b_im_relation
    group by chat_id
    having count(distinct user_id) = 2 and sum(user_id not in(3, 4)) = 0
) t on t.chat_id = i.chat_id

暫無
暫無

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

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