MySQL - 查找具有相同列但与某些ID匹配的行

时间:2015-11-30 03:20:45

标签: mysql sql database

我有一些看起来像这样的样本数据。

╔════╦══════════╦════════╗
║ 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值(不多也不少)

3 个答案:

答案 0 :(得分:0)

您可以将group bycountnot 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必须按顺序指定。