Mit IFNULL festlegen Null zu null
Ich habe eine Tabelle in dem ein Feld enthält eine ganze Zahl oder NULL
.
parent_id
2
4
6
NULL
NULL
45
2
Wie würde ich mich über das hinzufügen einer Anweisung IFNULL, so dass ans_count
aufgefüllt wird mit 0
statt NULL
?
Hier ist mein SQL code:
...
(SELECT parent_id AS pid, COUNT(*) AS ans_count
FROM qa
GROUP BY parent_id) AS n
UPDATE
Vollständige SQL-unten - danke an alle für Eure Geduld.
SELECT *
FROM qa
JOIN user_profiles
ON user_id = author_id
LEFT JOIN (SELECT cm_id,
cm_author_id,
id_fk,
cm_text,
cm_timestamp,
first_name AS cm_first_name,
last_name AS cm_last_name,
facebook_id AS cm_fb_id,
picture AS cm_picture
FROM cm
JOIN user_profiles
ON user_id = cm_author_id) AS c
ON id = c.id_fk
LEFT JOIN (SELECT parent_id AS pid, COUNT(*) AS ans_count
FROM qa
GROUP BY parent_id) AS n
ON id = n.pid
WHERE id LIKE '%'
ORDER BY id DESC
- downvote ohne feedback oder Anregungen? ich danke Ihnen sehr
- Ich habe nicht downvote, aber deine Beschreibung ist verwirrend. Es zeigt eine Spalte mit dem Namen
parent_id
dass Null-Werte enthalten, aber später werden Sie reden die Beseitigung Null-Werte für eine andere Spalteans_count
. Verwirren Dinge mehr, die Ihr code-snippet enthält. - zugestimmt - sorry für die Verwirrung - gerade veröffentlicht den vollständigen SQL, lassen Sie mich wissen, wenn mehr info benötigt wird
- vielen Dank für die vollständige Abfrage, erklärt, dass all die Verwirrung. siehe meine aktualisierte Antwort für details
Du musst angemeldet sein, um einen Kommentar abzugeben.
EDIT: NEUE INFO AUF DER GRUNDLAGE DER VOLLSTÄNDIGEN ABFRAGE
Der Grund, der zählt, kann null sein, in der Abfrage, die Sie angeben, ist da ein left join zurückkehren wird, Nullen auf nicht übereinstimmende Datensätze. Also die subquery selbst ist nicht null zurückgeben zählt (daher alle Antworten und Verwirrung). Sie müssen angeben, die IFNULL in der äußeren-die meisten wählen Sie, wie folgt:
ALTE ANTWORT
Können Sie genauer erklären, was Sie sehen und was Sie erwarten zu sehen? Zählen Sie nicht mehr zurück können Null-Werte.
Führen Sie diesen Satz von Abfragen und du wirst sehen, dass das zählt, sind immer 2. Sie können die Weise ändern, die NULL parent_ids angezeigt werden (als NULL oder 0), sondern der Graf selbst wird immer wieder zurückkehren.
Habe ich nicht getestet, aber ich denke, es wird funktionieren
ans_count
endet mit NULL anstelle von 0IF( COUNT(*) IS NULL, 0, COUNT(*)) AS ans_count
?Einfach wickeln Sie es um deine Aussage:
SELECT IFNULL( ( SELECT NULL FROM DUAL ), 0 ) AS n;
funktioniert, so dass die syntax-Fehler durch etwas anderes verursachtIFNULL
zu einer untergeordneten select-Anweisung zurückgibt, die mehr als eine Spalte.Haben Sie versucht, nur das zählen der parent_id ist?
Können Sie post-aktuelle Daten und vollständige Abfrage, zeigt das Verhalten, das Sie sprechen? In meiner Erfahrung
COUNT(*)
kann nie NULL sein.Kann Count(*) immer null zurück?
Tut COUNT(*) immer ein Ergebnis zurückgeben?
GROUP BY
? -- offenbar in diesem Fall ZÄHLEN, möglicherweise NULL zurückgeben, und ich würde es brauchen, um wieder eine null statt