SQL Left join nicht mit der Anzeige aller Zeilen von Links
So eine grobe Struktur von meinen zwei Tabellen concered ist wie folgt:
Table one: Services
services.id
services.name
Table two: Orders
orders.id
orders.item
orders.service
Tabelle enthält eine Liste der Dienste. Und Tabelle zwei ist eine Liste der Bestellungen. Ich bin versucht, erstellen Sie eine Liste aller Bestellungen für die Dienstleistungen von Tabelle zwei (orders), aber auch (Null) die Leistungen, die noch nicht bestellt worden. Ich bin mir bewusst, dass das ist, wo die LEFT JOIN kommt, aber es scheint nicht zu arbeiten. Es zeigt die meisten der Dienstleistungen, aber es gibt ein oder zwei Datensätze (von Dienstleistungen), die nicht angezeigt werden. Hier ist die Abfrage, die ich bin mit so weit..
Jede Beratung wird sehr geschätzt, danke!
select services.name,count(orders.service)
from services
LEFT JOIN orders ON services.id=orders.service
WHERE item IN (1,2,3,4)
group by statuses.service;
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre ursprüngliche Auswahl ist in Ordnung und sollte gewährleisten, dass alle Datensätze aus der Tabelle Dienste durch. Allerdings bist du dann die Beschränkung von
where
- Klausel. Wenn es keine Verknüpfung für eine bestimmte Zeile,item
habenNULL
in denen es IhrWHERE
- Klausel herausfiltern.Verzeihen Sie mir, wenn etwas falsch ist, ich komme aus der SQL-Server im hintergrund.
ON services.id = orders.service AND item IN (...)
WHERE
Klausel wird dann angewendet, danach wird Sie Sie wieder entfernen. @Frank die Lösung ist sauberer sowieso.Zunächst, ich glaube, du hast einen typo - Status.service-Dienste sollten.name, richtig?
Da Element eine Spalte aus der Tabelle Bestellungen, Sie sollten Sie in der join-Bedingung:
Sonst, filtern Sie heraus die Dienstleistungen, die ohne Bestellung oder deren Bestellungen nur über Gegenstände, die nicht in (1,2,3,4).
Freundlichen GRÜßEN, Frank