2016-08-22 6 views
-1

Ich habe Tabellen auf meiner DB wie folgt:Abfrage für Verbände NN

enter image description here

NB:
ID_A Fremdschlüssel-Referenzen A (ID)
ID_B Fremdschlüsselreferenzen B (ID)

Jetzt ist mein Problem das:
Angenommen, eine Liste von A IDs wie diese {12,15,26}, ich möchte alle Werte von B finden, für die alle Werte in der Menge zugeordnet sind. Ich kann etwas tun:

select ID_B from AB where ID_A = 12 
intersect 
select ID_B from AB where ID_A = 15 
intersect 
select ID_B from AB where ID_A = 26 

Aber es ist nicht so durchführen und elegant. Was ist der richtige Weg, dies zu tun?

Und wenn ich die Ergebnisse finden würde, die die Werte im Satz mit maximal n Fehlern haben? (zum Beispiel n = 2 -> finde alle Datensätze, die alle Werte in der Menge enthalten, und alle Datensätze, die +2 (maximal zwei Werte zusätzlich) und -2 (maximal zwei Werte in der Subtraktion) haben im Set).

Antwort

1

ein GROUP BY Sie verwenden HAVING sicher, dass alle unterschiedliche ID_A Werte zu machen gefunden:

select ID_B 
from AB 
where ID_A in (12, 15, 26) 
group by ID_B 
having count(distinct ID_A) = 3