Hier ist meine Situation.How to Anti Beitreten in MSSQL, wenn die Verknüpfung von Daten aus einer dritten Tabelle
PayTable
+-------+------+--------------+
| Craft | Job | sequence |
+-------+------+--------------+
| 400 | 1 | 1 |
+-------+------+--------------+
| 401 | 2 | 2 |
+-------+------+--------------+
| 5501 | 2 | 3 |
+-------+------+--------------+
Jobs
+-------+------+------+
| Job | CraftTemplate |
+-------+------+------+
| 1 | 1 |
+-------+------+------+
| 2 | 1 |
+-------+------+------+
Pay Template
+-------+--+
| Template |
+-------+--+
| 1 |
+-------+--+
PayCraftTemplate
+-------+------+---------+
| PayTemplate | Craft |
+-------+------+---------+
| 1 | 400 |
+-------+------+---------+
| 1 | 401 |
+-------+------+---------+
Was ich tun müssen, um alle Kunsthandwerk aus der Auszahlungstabelle finden, wo das Fahrzeug nicht in der PayCraftTemplate existiert. Dies scheint ziemlich geradlinig als Anti-Join-Muster zu sein, aber ich kann nicht scheinen, dass die Daten entsprechend zurückkommen.
Die Join-Verbindungen sind:
PayTable INNER JOIN Jobs by Job -> Job
Jobs LEFT OUTER JOIN Pay Template by CraftTemplate -> Template
Pay Template LEFT OUTER JOIN by Template -> PayTemplate
Hier ist meine aktuelle Versuch:
select
*
FROM
PayTable
WHERE NOT EXISTS (
SELECT 1
FROM
Jobs
LEFT OUTER JOIN PayTemplate
ON PayTemplate.Template = Jobs.CraftTemplate
LEFT OUTER JOIN PayCraftTemplate
ON PayCraftTemplate.Template = PayTemplate.Template
WHERE
PayTable.Craft = PayCraftTemplate.Craft AND PayTable.Job = Jobs.Job
) AND PayTable.Job IS NOT NULL AND PayTable.Craft IS NOT NULL
Dies wird die Daten nicht Rückkehr erwarte ich, würde ich Reihe 3 von Auszahlungstabelle erwarten, nur statt kehre ich bekomme Zeilen 1,2
Warum verknüpfen Sie Auszahlungstabelle in der Innen schließt sich stattdessen eine where-Klausel auf der inneren Unter wählen zu tun? –
Das ist übrig von, als ich die WHERE-Klausel in die Joins verschoben habe, weil es eine 'linke Verknüpfung' war. Sie können auf die Wo-Klausel zurückgehen. Ich habe gerade meine Antwort bearbeitet und gezeigt, wie deine Antwort mit dem fixierten Tippfehler funktioniert. – SqlZim
Danke. Das funktioniert. Ich war so nah, lol. –