2012-12-11 26 views
10

ben bir çapraz referans tablosu var maç:MySQL - seçme kimlikleri Tüm etiketleri

ID | tag 
1 | 4 
1 | 5 
1 | 6 
2 | 4 
2 | 5 
2 | 8 
3 | 2 

Ben etiketleri kümesinin tümmaç kimlikleri seçmeniz gerekir. Örneğin, '4','5' etiketlerine sahip olsaydım, '1','2' kimliklerini alırdım. Etiketlerin '4','2' verildiğine rağmen etiketlerin tüm ile eşleşen hiçbir kimlik olmadığından hiçbir kimlik almazdım. Ben etiketleri '4','9' verildi eğer '9' için bir arama bir NULL değere neden olur çünkü

Ayrıca, o zaman ben de herhangi çıkan Kimliğini almak olmamalı ve bu nedenle hiçbir kimlikleri tüm etiketleri eşleşir.

Son 2 gündür saçlarımı çekiyorum. Umarım birisi bana yardım edebilir.

+0

Etiketler ' '4', '8'' vermelidir Sonuç olarak ID = 2' değil, değil mi? –

+0

Evet, haklısınız. Benim hatam - düzeltip düzeltemeyeceğimi göreyim. – user1113531

+1

Bu soruyu, bu (ortak) sorunu çözmek için 10'dan fazla yol için de bakın: ** [SQL sonuçları bir çok çeken ilişkide filtrelemek için nasıl] (http://stackoverflow.com/questions/7364969/how -to-filtre-sql-sonuçlar-in-a-çok-arasında-ilişkisi) ** –

cevap

17

Sorgulama fikri, kayıt sayısını WHERE maddesinde sağladığınız değerlerin sayısına göre eşleştirmeniz gerektiğidir. benzersiz kısıtlama her bir kimlik için etiketin üzerinde belirtilen olmasaydı

SELECT ID 
FROM tableName 
WHERE tag IN (4, 8) 
GROUP BY ID 
HAVING COUNT(*) = 2 

ardından DISTINCT tabi

SELECT ID 
FROM tableName 
WHERE tag IN (4, 8) 
GROUP BY ID 
HAVING COUNT(DISTINCT tag) = 2 
+0

Hızlı yanıt ve aklımı korumak için teşekkür ederiz. Bu harika çalışıyor! Etiketlerde benzersiz bir kısıtlama vardır, bu nedenle ilk öneri mükemmeldir. – user1113531

+0

hoşgeldiniz ': D' –

+0

Kahramanım! 20 satırlık bir sorguyla saçımı kopartıyordum, tek eksik olanım o bölümdü, kudos! – NaturalBornCamper