2017-11-08 3 views
0

Ich habe diese Tabelle in meiner DatenbankMySQL Query - SELECT Zeilenanzahl von anderen Tabelle

enter image description here

Und ich; m diese Abfrage mit:

SELECT cl.cl_id, cl.name, COUNT(*) 
FROM cl, st 
WHERE st.cl_id = cl.cl_id 
GROUP BY cl.cl_id 
ORDER BY cl.cl_id; 

Da einige cl_id Wert in st Tabelle nicht beendet wird, kehrt der Ausgang nur, wo cl_id auf dem Tisch st ist. Die Abfrage ich brauche, ist wie folgt:

SELECT cl.cl_id, cl.name 
FROM cl; 

aber dieses

SELECT COUNT(*) 
FROM st 
WHERE st.cl_id = cl.cl_id; 

implementieren, aber wenn in st Tabelle nicht alle Wert von cl_id den Wert auf 0 zurückgesetzt

+1

Tipp heute: wechseln Sie in den modernen, explizit 'JOIN' Syntax. Einfacher zu schreiben (ohne Fehler), einfacher zu lesen (und zu pflegen) und einfacher in Outer Join zu konvertieren, falls erforderlich. – jarlh

+0

@jarlh denke ich, dass die heutige zweite Tipp von heute ist. – Strawberry

+0

@Strawberry, so peinlich, hast du mich ... – jarlh

Antwort

0

nie Kommas in der FROM Klausel. Immer verwenden Sie die richtige, explizite JOIN Syntax. In Ihrem Fall wäre es dann klar sein, dass Sie ein LEFT JOIN benötigen:

SELECT cl.cl_id, cl.name, COUNT(st.cl_id) 
FROM cl LEFT JOIN 
    st 
    ON st.cl_id = cl.cl_id 
GROUP BY cl.cl_id 
ORDER BY cl.cl_id; 
0

(basierend auf Juan Antwort) Verwenden LEFT JOIN und die COALESCE Funktion, die den ersten Nicht-Null-Wert aus einer Liste von Argumenten zurück

SELECT 
    COALESCE(st.cl_id,0) 
, COALESCE(st.name,'Name Not Found') 
, COUNT(cl.cl_id) 
FROM cl 
LEFT JOIN st 
    ON st.cl_id = cl.cl_id 
GROUP BY COALESCE(st.cl_id,0) 
ORDER BY COALESCE(st.cl_id,0) ; 
Verwandte Themen