Meine einzigen Erfahrungen in Abfragen sind mit MySQL, aber hoffentlich ist es ähnlich genug.
Ihre Abfrage sieht für mich seltsam aus, weil Ihre Unterabfrage in der SELECT-Klausel ist. Ich habe das nie zuvor gesehen ... aber anscheinend wird es in MySQL unterstützt. Normalerweise kommt die Unterabfrage nach einem FROM oder LINKEN JOIN oder JOIN.
Ihr Beispiel einfach genug ist, dass man es mit einem LEFT implementieren könnte JOIN:
SELECT C.guid, ..., COUNT(distinct D.id) as numprogs
FROM Computers AS C
LEFT JOIN ComputerData as D ON D.computer_id = C.id
In diesem Fall LEFT JOIN ist die richtige Art von schließen, weil zu verwenden, auch wenn es keinen passenden Datensatz in der ist D-Tabelle für einen bestimmten C-Datensatz, Ihre Ergebnismenge enthält immer noch diesen C-Datensatz und die Nummernprotokolle werden wie erwartet nur Null sein.
Wenn Sie wirklich eine Unterabfrage verwenden möchten, versuchen Sie dies:
SELECT C.guid, ..., S.numprogs
FROM Computers AS C
LEFT JOIN
(SELECT computer_id, COUNT(*) as numprogs
FROM ComputerData GROUP BY computer_id) AS S
ON C.id=S.computer_id
ich Ihre Anfrage empfehlen vereinfacht, um es möglichst einfache Abfrage zu erhalten, die funktionieren sollte, aber nicht funktioniert. Dann teilen Sie uns die spezifische Fehlermeldung mit, die Ihr Datenbankmodul zurückgibt.
Bearbeiten: Ich looked in der MySQL chapter about subqueries und es scheint, als ob Sie versuchen sollten, entfernen Sie die "as numprograms" -Klausel nach Ihrer Unterabfrage ... vielleicht haben Sie keine Wahl über die Benennung der Spalte, die aus der Unterabfrage, nachdem Sie die Unterabfrage bereits verfasst haben.
Was ist der Fehler? –
Hallo, Sorry, es wurde behoben. Danke trotzdem, Azuka – Zahymaka