ich mehrere Tabellen, die ich so angeschlossen haben:JOIN/merge mehrere Tabellen mit demselben Schlüssel
SELECT *
FROM tableA AS A
FULL OUTER JOIN tableB AS B
ON B.KEY = A.KEY
FULL OUTER JOIN tableC AS C
ON C.KEY = A.KEY
FULL OUTER JOIN tableD AS D
ON D.KEY = A.KEY
Dies funktioniert gut, aber ich irgendwann getrennte Reihen, wo der Schlüssel nicht in allen Tabellen vorhanden ist.
Beispiel
WITH tableA([KEY], payloadColumn) AS
(
SELECT 1, 'var_A1'
), tableB([KEY], payloadColumn) AS
(
SELECT 2, 'var_B2'
), tableC([KEY], payloadColumn) AS
(
SELECT 1, 'var_C1'
), tableD([KEY], payloadColumn) AS
(
SELECT 2, 'var_D2'
)
SELECT * FROM tableA as A
FULL OUTER JOIN tableB as B ON B.[KEY] = A.[KEY]
FULL OUTER JOIN tableC as C ON C.[KEY] = A.[KEY]
FULL OUTER JOIN tableD as D ON D.[KEY] = A.[KEY]
Returns
+------+---------------+------+---------------+------+---------------+------+---------------+
| KEY | payloadColumn | KEY | payloadColumn | KEY | payloadColumn | KEY | payloadColumn |
+------+---------------+------+---------------+------+---------------+------+---------------+
| 1 | var_A1 | NULL | NULL | 1 | var_C1 | NULL | NULL |
| NULL | NULL | 2 | var_B2 | NULL | NULL | NULL | NULL |
| NULL | NULL | NULL | NULL | NULL | NULL | 2 | var_D2 |
+------+---------------+------+---------------+------+---------------+------+---------------+
Aber ich brauche sie alle in der Folge in der gleichen Zeile zu sein (nicht zwei Reihen für 2
). Wie kann ich das machen?
Das Erhalten eines 'NULL' mit einem' FULL JOIN' bedeutet, dass es * keine * Zeile gibt, die den Einschränkungen in 'JOIN' entspricht. Das ist die Definition eines 'FULL JOIN'. Wenn Sie stattdessen Zeilen ohne Übereinstimmung ausfiltern möchten, verwenden Sie einen 'INNER JOIN'. – jpmc26
Schnellgedanke: Erstellen Sie eine Ansicht, die eine Union aller Nicht-Null-Schlüssel aller vier Tabellen ist, verwenden Sie dann diese Ansicht als primäre ('FROM') Tabelle in Ihrer Hauptabfrage, und linken Sie die Nutzlast – dlatikay
@ jpmc26 - das ist nicht, was sie fragen. –