2015-11-30 122 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必須按順序指定。

相關問題