SQL INNER JOIN, CROSS & implizite JOIN (Komma) alle Ergebnis JOIN in dem können wir ein SQL- "Kreuzprodukt" jeder möglichen Verkettung einer linken Argumentzeile mit einer rechten Argumentzeile (mit Spalten, die pro Quellentabellenalias umbenannt wurden) nennen. Im Fall von INNER JOIN löscht ON alle Ergebniszeilen, die ihre Bedingung nicht erfüllen. (So ist INNER JOIN ON 1 = 1 dasselbe wie CROSS & implizite JOIN. Dies ist auch das Ergebnis für Dialekte, die INNER JOIN ohne ON erlauben.) Dies ist unabhängig davon, was NULL in einer Tabelle sein darf.
Siehe this (dialect-independent) answer explaining INNER/CROSS/implicit JOINs. Das erklärt auch, dass alle JOIN "Sinn macht". (Obwohl SQL-Bedeutungen für nicht-relationale SQL-Tabellen (solche mit NULLS oder doppelte Zeilen) komplex und undurchsichtig sind.) Natürlich macht die Verwendung der falschen Abfrage keinen Sinn.
PS Sie möchten wahrscheinlich nur eindeutige Zeilen auswählen. Wahrscheinlich möchten Sie die Zeilen WHERE a.employee = a.employee
nicht. Und Sie wollen nicht, für Spalten (a.employee, ..., b.employee, ...), sowohl die Zeile (x, ..., y, ...) und die Zeile (y, ..) ., x, ...), für die die übliche Lösung etwas wie WHERE a. employee <= b.employee
ist. Aber Sie müssen die Bedeutung der Eingabetabelle und der Ergebnistabelle wissen, bevor Sie eine entsprechende Abfrage schreiben können.
Definiere _analytische Konsequenzen_? Du hast erwähnt, dass du Probleme hast, was sind sie? –
@ JonathonOgden dies ist eine ausführlichere Version meiner Frage: http://stackoverflow.com/questions/38377403/self-join-produces-inconsistent-value-for-last-month – Disasterkid
Grob gesagt, da es ein nicht-einzigartig ist Spalte, Sie werden natürlich Aufzeichnungen zu sich selbst beitreten. Ein Mitarbeiterdatensatz in A wird sich also in B ohne eine zusätzliche eindeutige Schlüsselspalte, wie z. B. eine Mitarbeiter-ID, zum Filtern derselben einfügen. Welche Analyse werden Sie für diese Daten durchführen? Das wird Ihnen helfen, eine spezifischere Antwort zu geben. –