我有一些看起来像这样的样本数据。
╔════╦══════════╦════════╗
║ ID ║ PERSONID ║ ITEMID ║
╠════╬══════════╬════════╣
║ 1 ║ 123 ║ 1 ║
║ 2 ║ 123 ║ 2 ║
║ 3 ║ 123 ║ 3 ║
║ 4 ║ 444 ║ 1 ║
║ 5 ║ 123 ║ 4 ║
║ 6 ║ 444 ║ 2 ║
║ 7 ║ 444 ║ 3 ║
╚════╩══════════╩════════╝
我通常会将数据解析为以下内容:
PERSONID - 123
ITEMID - 1
ITEMID - 2
ITEMID - 3
ITEMID - 4
PERSONID - 444
ITEMID - 1
ITEMID - 2
ITEMID - 3
假设我获得了一些ITEMID
值:[1, 2, 3]
,与PERSONID - 444
组完全相同。如何编写查询以检查是否存在具有相同PERSONID
值的一组行,并且包含完全相同的ITEMID
值(不多也不少)
答案 0 :(得分:0)
您可以将group by
与count
和not exists
select personid
from Table1 t
where not exists ( select 1 from Table1 t1
where t1.itemid not in (1,2,3)
and t1.personid = t.personid
)
group by personid
having count(*) =3
答案 1 :(得分:0)
要查找具有相同ITEMID值的PERSONID,请使用以下命令:
假设表名为PERSON_ITEM
SELECT P.PERSONID
FROM PERSON_ITEM P
WHERE
P.ITEMID IN (1, 2, 3)
GROUP BY P.PERSONID
HAVING
COUNT(DISTINCT P.ITEMID) = 3;
答案 2 :(得分:0)
使用group_concat()
进行简单的基于文本的匹配:
select PERSONID
from mytable
group by PERSONID
having group_concat(ITEMID order by ITEMID) = '1,2,3'
请注意,您寻求的ID必须按顺序指定。