Mysql

在一個表中獲取兩個或多個給定值的所有共享值 (SQL)

  • June 12, 2022

我有一個聊天數據庫,每個使用者都屬於一個聊天;這種關係在表“is_member(uid, cid)”中表示。現在,在創建新聊天時,我想檢查是否還沒有與這些使用者進行聊天。這是我的範例表(使用者 1、2、3 和使用者 2、3 一起聊天):

uid | cid
----|----
1  |  1
2  |  1
3  |  1
2  |  2
3  |  2

現在我如何制定我的(My)SQL 語句以獲取例如參數 uid=2 和 uid=3 作為輸出如下:

cid
---
1
2

… 或使用參數 uid=1、uid=2 和 uid=3:

cid
---
1

非常感謝您的幫助,我對 SQL 比較陌生,我在網上的任何地方都沒有發現任何類似的東西。提前致謝!

根據數據和預期結果,我認為您正在尋找MySQL HAVING子句。

您的數據:

CREATE TABLE test(
uid INT,
cid int  );

insert into test values (1,1), (2,1),(3,1),(2,2),(3,2);

第一次查詢。

現在我如何制定我的(My)SQL 語句以獲取例如參數 uid=2 和 uid=3 作為輸出如下:

select cid
from test
where uid in (2,3)
group by cid
having count(distinct uid) =2;

結果:

cid
1
2

第二次查詢。

或使用參數 uid=1、uid=2 和 uid=3:

select cid
from test
where uid in (1,2,3)
group by cid
having count(distinct uid) =3;

結果:

cid
1

展示:https ://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=d98d0132ecea7b4730ab7b8e70813817

筆記。查詢不是動態的,因此每次更改 where 子句時,您都需要更改count(distinct uid)where 條件中使用的值的數量

引用自:https://dba.stackexchange.com/questions/313262