Sql 选择具有相同列的不同值
我已经阅读了许多Sql 选择具有相同列的不同值,sql,postgresql,Sql,Postgresql,我已经阅读了许多SQL查询,并尝试了这些查询,但没有成功地实现我想要的。我需要一个SQL查询,该查询接受随机成员ID的参数,如果他们有共同的对话,则返回: SELECT conversation_id FROM conversation_mapping WHERE user_id IN ('1902616933097029', '1112126462227347', '26544849', '13587745') GROUP BY conversation_id HAVING COUNT(c
SQL
查询,并尝试了这些查询,但没有成功地实现我想要的。我需要一个SQL
查询,该查询接受随机成员ID的参数,如果他们有共同的对话,则返回:
SELECT
conversation_id
FROM conversation_mapping
WHERE user_id IN ('1902616933097029', '1112126462227347', '26544849', '13587745')
GROUP BY conversation_id
HAVING COUNT(conversation_id) <> 1
结果一点也不好,因为在ID“1902616933097029”、“111212646227347”、“26544849”、“13587745”中,根本没有两个相同的对话
我的桌子
---------------------------------------
| user_id | conversation_id |
---------------------------------------
|'1112126462227347'| 38 |
|"1112126462227347"| 39 |
|"13587445" | 39 |
|"1902616933097029"| 38 |
|"1902616933097029"| 39 |
|"26544849" | 38 |
|"26544849" | 39 |
|"8541245" | 38 |
---------------------------------------
在语句中的
的问题是,它查找id1、id2或id3,并且没有选择具有相同会话id的id1、id2和id3
如果我理解正确,您希望会话具有共同的所有id。如果是,请使用having
子句:
SELECT conversation_id
FROM conversation_mapping
WHERE user_id IN ('1902616933097029', '1112126462227347', '26544849', '13587745')
GROUP BY conversation_id
HAVING COUNT(DISTINCT user_id) = 4;
“4”是列表中的用户数。在表中有“13587445”,但搜索13587745
检查“where”条件中的值并执行此操作
SELECT
conversation_id
FROM conversation_mapping
WHERE user_id IN ('1902616933097029', '1112126462227347', '26544849', '13587445')
GROUP BY conversation_id
HAVING COUNT(conversation_id) = 4;
请给出所需输出的示例。对于值“1902616933097029”、“111212646227347”、“26544849”、“13587745”,它应该返回39,这是id在PostgreSQL中唯一的共同对话:具有array_agg(user_id)@>array['1902616933097029”、“111212646227347”、“26544849”、“13587745']
@AlexM,这是用于哪个dbms的?(注意没有指定dbms。)由于某些原因,ID不是整数类型。我使用PostgreSQLThis,效果很好,并按预期返回结果。谢谢。如果有另一个包含N个ID的对话,则会出现问题。查询返回对话的id,而N在,但有N+Y个参与者,因此它最终无法满足我的要求。@sql\U newbie\U Developer。只能回答您提出的问题:“接受随机成员ID参数的查询,如果它们有共同的对话,则返回”。这就是这个答案的作用。如果你有一个不同的问题,那么作为一个新的问题来提问,并附上样本数据、期望的结果和清晰的解释。
SELECT
conversation_id
FROM conversation_mapping
WHERE user_id IN ('1902616933097029', '1112126462227347', '26544849', '13587445')
GROUP BY conversation_id
HAVING COUNT(conversation_id) = 4;