Ich bin ziemlich neu in SQL und habe das folgende Problem. Betrachten Sie diese Tabellen 'Autos' und 'Farben':
[Cars]
CarID | Brand | ColorID | Amount
1 | Ford | 10 | 23
2 | VW | 11 | 15
3 | Opel | 11 | 12
4 | Opel | NULL | 21
5 | Ford | NULL | 16
[Colors]
ColorID | ColorName
10 | Blue
11 | Red
12 | White
13 | Green
Ich möchte eine Abfrage haben, die alle Autos mit ihren Farbnamen auflistet, damit ich diese Ausgabe habe:
CarID | Brand | ColorName | Amount
1 | Ford | Blue | 23
2 | VW | Red | 15
3 | Opel | Red | 12
4 | Opel | NULL | 21
5 | Ford | NULL | 16
SELECT CarID, Brand, ColorName, Amount
FROM Cars, Colors
WHERE Cars.ColorID = Colors.ColorID
Lässt die Datensätze weg, bei denen ColorName = NULL ist.
SELECT CarID, Brand, ColorName, Amount
FROM Cars, Colors
WHERE Cars.ColorID = Colors.ColorID OR
Cars.ColorId IS NULL
Liefert zu viele Datensätze.
Welche SQL-Anweisung brauche ich hier? Ich verwende Microsoft SQL Server 2012.
Danke, Cooz
4 Antworten
USE LEFT JOIN
So was:
SELECT ca.CarID, ca.Brand, cl.ColorName, ca.Amount
FROM Cars AS ca
LEFT JOIN Colors AS cl
ON ca.ColorId = cl.ColorId
AUSGABE:
CarID Brand ColorName Amount
1 Ford Blue 23
2 VW Red 15
3 Opel Red 12
4 Opel (null) 21
5 Ford (null) 16
Link zur Demo:
ERLÄUTERUNG:
LEFT JOIN
Funktioniert so
Allgemeine Syntax:
SELECT column-names
FROM table-name1 LEFT JOIN table-name2
ON column-name1 = column-name2
WHERE condition
Für weitere Informationen folgen Sie den folgenden Links:
Verwenden Sie in der Klausel FROM
niemals Kommas. Verwenden Sie immer die richtige, explizite JOIN
-Syntax.
Sie suchen nach einem LEFT JOIN
, daher lautet die richtige Syntax:
SELECT ca.CarID, ca.Brand, co.ColorName, ca.Amount
FROM Cars ca LEFT JOIN
Colors co
ON ca.ColorID = co.ColorID;
Hinweis: Sie sollten auch lernen, Tabellenaliasnamen und qualifizierte Spaltennamen zu verwenden. Wenn sich Ihre Abfrage auf mehr als eine Tabelle bezieht, sollten Sie alle Spaltennamen qualifizieren.
Verwenden Sie die linke Verknüpfung. Dadurch werden alle colorid's
aus der zweiten Tabelle ausgewählt und Nullwerte für die Fahrzeuge zurückgegeben, die keine Daten in der Tabelle colours
haben
Select CarID , Brand , ColorName, Amount
from cars
Left join colors
on cars.colorid = colors.colorid
SELECT cr.CarID, cr.Brand, cl.ColorName, cr.Amount FROM Cars AS cr
LEFT JOIN colors AS cl ON cr.ColorId = cl.ColorId and
cl.colorId is not null
Versuchen Sie diesen Kumpel
Neue Fragen
sql
Structured Query Language (SQL) ist eine Sprache zum Abfragen von Datenbanken. Zu den Fragen sollten Codebeispiele, Tabellenstruktur, Beispieldaten und ein Tag für die verwendete DBMS-Implementierung (z. B. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 usw.) gehören. Wenn sich Ihre Frage ausschließlich auf ein bestimmtes DBMS bezieht (bestimmte Erweiterungen / Funktionen verwendet), verwenden Sie stattdessen das Tag dieses DBMS. Antworten auf mit SQL gekennzeichnete Fragen sollten ISO / IEC-Standard-SQL verwenden.