Dies steht in engem Zusammenhang mit dieser Frage , aber fügt eine weitere Anforderung hinzu.
Gegeben eine übergeordnete Tabelle 'Eltern'
%Vor%und eine Viele-Viele-Beziehungstabelle 'rel' zwischen Eltern und einer (hier nicht näher bezeichneten) Eigenschaftentabelle
%Vor%Wie kann ich alle Eltern auswählen, die alle und nur eine bestimmte Gruppe von Beziehungen haben? Z.B. Wie finde ich mit den Beispieldaten alle Eltern, die Beziehungen zu genau der Eigenschaft 5 und 1 haben?
Wenn Sie alle Eltern mit mindestens eine 5 und eine 1 auswählen möchten, können Sie verwenden:
%Vor%Wenn Sie genau eine 5 und eine 1 benötigen, lesen Sie diese Antwort
Mit zwei verschachtelten Unterabfragen, wie diesem ..
%Vor%Der erste liest "Zeigen Sie mir alle Eltern an, wo nicht eine Eigenschaft in der angegebenen Liste von Eigenschaften ist, die nicht in der übergeordneten Eigenschaftentabelle für das angegebene übergeordnete Element enthalten ist ...."
Die zweite Unterabfrage lautet: "Stellen Sie außerdem sicher, dass in der parentProperties-Tabelle für diesen übergeordneten Eintrag kein Eintrag für eine Eigenschaft vorhanden ist, die nicht in der angegebenen Liste ist."
Diese Alternative hat den Vorteil einer konstanten Anweisungsstruktur und nur eines Parameters, unabhängig von der Anzahl der Beziehungen, nach denen Sie suchen:
%Vor%Nachteile:
Wenn MySql minus
unterstützt, könnte die Abfrage wie folgt aussehen:
Die not in
wird diejenigen Beziehungen entfernen, die (5,1) überschreiten, z. (5,1,3).
Ich weiß, dass du MySql benutzt und meine Antwort ist daher falsch. Nimm es einfach als eine andere Idee.
Sie können dies mit einer Gruppe nach.
SELECT PARENT_ID Von link_tbl WO PROP_ID IN (5,1) GROUP BY PARENT_ID HABEN COUNT (*) = 2