您的子查詢有兩列:標籤和大小。這不是一個標量子查詢。
錯誤的解釋是選擇列表中的每個子查詢都必須是標量子查詢,這意味着它必須只返回一列和一行。
示例:讓我們保持簡單並使用字面值查詢,因此我們甚至不引用表。我們爲選擇列表中的每個項目分配一個列別名。
SELECT
123 AS colum1,
456 AS column2,
(SELECT 789, 'abc') AS column3;
但是等一下! 789和'abc'如何分配列別名column3
?這是含糊不清的。
事實證明,這是不允許的,並會產生一個錯誤信息,,因爲它是不明確的。子查詢返回了兩列,但這違反了外部查詢的選擇列表中的每個項必須是一列的規則。我們可以這樣修復:
SELECT
123 AS colum1,
456 AS column2,
(SELECT 789) AS column3,
(SELECT 'abc') AS column4;
現在選擇列表中的每個項目只返回一列。
類似的規則存在,需要在選擇列表中的子查詢返回不超過一個排,太:
SELECT
123 AS colum1,
456 AS column2,
(SELECT some_column FROM table_with_multiple_rows) AS column3;
這是錯誤的,因爲子查詢返回多個值,而且也沒有辦法的東西所有這些值轉換爲外部查詢結果的一行。
有幾種方法可以解決這個問題。確保子查詢返回不超過一行。無論是使用WHERE子句指定一個行(在表的主鍵或唯一鍵的條件):
SELECT
123 AS colum1,
456 AS column2,
(SELECT some_column FROM table_with_multiple_rows
WHERE unique_column = 789) AS column3;
或者使用LIMIT 1:
SELECT
123 AS colum1,
456 AS column2,
(SELECT some_column FROM table_with_multiple_rows
LIMIT 1) AS column3;
無論哪種方式,你的子查詢將返回最多隻有一行(它可以匹配零行,在這種情況下,子查詢的結果將爲NULL)。
最有可能的,因爲你有一個空的'SELECT'。 –