Ihre Unterabfrage hat zwei Spalten: Tag und Magnitude. Dies ist keine skalare Unterabfrage.
Die Erklärung des Fehlers ist, dass jede Unterabfrage in der Auswahlliste eine skalare Unterabfrage sein muss, was bedeutet, dass sie genau eine Spalte und eine Zeile zurückgeben muss.
Beispiel: Lassen Sie uns es einfach halten und Abfragen von Literalwerten verwenden, sodass wir nicht einmal Tabellen referenzieren. Wir weisen jedem Element in der Auswahlliste einen Spaltenalias zu.
SELECT
123 AS colum1,
456 AS column2,
(SELECT 789, 'abc') AS column3;
Aber warten Sie! Wie kann sowohl 789 als auch 'abc' der Spaltenalias column3
zugewiesen werden? Das ist mehrdeutig.
Es stellt sich heraus, es ist nicht erlaubt, und wird eine Fehlermeldung, weil es ist mehrdeutig. Die Unterabfrage hat zwei Spalten zurückgegeben, aber dies verstößt gegen die Regel, dass jedes Element in der Auswahlliste der äußeren Abfrage eine Spalte enthalten muss. Wir können es auf diese Weise beheben:
Jetzt gibt jedes Element in der Auswahlliste nur eine Spalte zurück.
Eine ähnliche Regelung besteht, dass eine Unterabfrage in der Auswahlliste erfordert nicht mehr als eine Zeile zurück, auch:
SELECT
123 AS colum1,
456 AS column2,
(SELECT some_column FROM table_with_multiple_rows) AS column3;
Das ist falsch, weil die Unterabfrage mehr Werte zurückgibt, und es gibt keine Möglichkeit zu stopfen all diese Werte in einer Zeile des Ergebnisses in der äußeren Abfrage.
Es gibt eine Reihe von Möglichkeiten, dies zu lösen. Stellen Sie sicher, dass die Unterabfrage nicht mehr als eine Zeile zurückgibt. Entweder verwenden Sie eine WHERE-Klausel eine Zeile (eine Bedingung auf dem primären oder eindeutigen Schlüssel der Tabelle) angeben:
SELECT
123 AS colum1,
456 AS column2,
(SELECT some_column FROM table_with_multiple_rows
WHERE unique_column = 789) AS column3;
Oder Verwendung LIMIT 1:
SELECT
123 AS colum1,
456 AS column2,
(SELECT some_column FROM table_with_multiple_rows
LIMIT 1) AS column3;
So oder so, Ihre Unterabfrage wird zurückkehren höchstens eine Zeile (es könnte null Zeilen entsprechen, in diesem Fall ist das Ergebnis der Unterabfrage NULL).
Höchstwahrscheinlich, weil Sie ein leeres 'SELECT' haben. –