2015-11-30 125 views
0

我有一些看起来像这样的示例数据。MySQL - 查找具有相同列但匹配特定ID的行

╔════╦══════════╦════════╗ 
║ 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

什么样的代码是您使用此 – lyndact

+0

我使用MySQL的数据库,但我没有写查询的是,不知道从哪里开始 –

+0

好吧,我会开始工作[MySQL查询的 – lyndact

回答

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 
0

准确地找到其itemid值相同使用的PERSONIDs:

说表名是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; 
0

使用group_concat()一个简单的基于文本匹配:

select PERSONID 
from mytable 
group by PERSONID 
having group_concat(ITEMID order by ITEMID) = '1,2,3' 

注意,你所寻求的IDS必须按顺序指定。

相关问题