Ich habe versucht, durch die zuvor gestellte Frage für mein Problem zu durchsuchen, aber es gibt so viele Fragen. Hoffentlich ist das kein Duplikat, ich bin neu in SQL, versuche also immer noch meinen Kopf darum zu wickeln! BTW, ich benutze MySQL.SQL SELECT (viele-2-viele)
So habe ich zwei Tabellen:
Sickness
id: 1, name: flu
id: 2, name: migraine
Symptom
id: 1, name: cough
id: 2, name: headache
und die Zwischentabelle z:
Sickness2Symptom
sickness_id: 1, symptom_id: 1
sickness_id: 1, symptom_id: 2
sickness_id: 2, symptom_id: 2
Ich würde eine Abfrage wie die alle Krankheiten aufgeführt, die keine Beziehung zu einem bestimmten Symptome hat.
Also, wenn wir betrachten alle Beziehungen zwischen einem Symptom und Krankheiten erstellt abrufen. Nehmen wir an, das Symptom hat id=1 (cough)
. Diese Abfrage würde wie folgt aussehen:
SELECT sickness.*
FROM sickness
JOIN sickness2symptom
ON sickness2symptom.sickness_id = sickness.id
JOIN symptom
ON symptom.id = sickness2symptom.symptom_id
WHERE symptom.id = 1";
dass also "flu"
zurückkehren würde.
Aber wie würde ich abfragen, um alle Krankheiten zu erhalten, die keine Beziehung zu Symptom mit id 1
haben, in diesem Fall wäre das Ergebnis der Abfrage "migraine"
?
Wenn ich nur die WHERE
Klausel zu ändern, ist es offensichtlich nicht korrekt.
Danke für jede Hilfe!
Vielen Dank! Jetzt, wo ich die Lösung sehe, ist es offensichtlich. Ich habe Dinge in meinem Kopf überkompliziert :) Ich akzeptiere deine Antwort, sobald ich erlaubt bin (ein paar Minuten, bis ich akzeptiere) – Alex
Und Sie brauchen nur die Aliase in der Unterabfrage, um die äußere Abfrage zu referenzieren, die Der Abfrageprozessor übernimmt die aktuelle (innere) Abfragetabelle, sofern nicht explizit auf eine andere Stelle verwiesen wird. So kürzer, mit Standard-Namen wäre: "Wählen Sie * aus Krankheit s, wo nicht existiert (wählen Sie * aus Sickness2Symptom wo sickle_id = s.id und symptom_id = 1)" –