2017-04-06 107 views

回答

0

最終選擇沒有指定任何列。試試這個:

SELECT * from (SELECT Tag, COUNT(*) AS magnitude 
FROM (SELECT * 
FROM sport b 
join sport a 
on a.Tag = b.Name 
where b.sport_ID > a.sport_ID and a.Tag = 'Football') as ball 
group by Tag 
LIMIT 1) as ball2 

即使b.sport_ID> b.sport_ID沒有意義。

+0

仍然出現似乎錯誤 – Beck

+0

更新了查詢。當你有分組功能時,你也錯過了group by子句。你是否得到相同的錯誤或不同? –

+0

我現在正在收到此消息#1248 - 每個派生表都必須具有自己的別名 – Beck

1

您的子查詢有兩列:標籤和大小。這不是一個標量子查詢。

錯誤的解釋是選擇列表中的每個子查詢都必須是標量子查詢,這意味着它必須只返回一列和一行。

示例:讓我們保持簡單並使用字面值查詢,因此我們甚至不引用表。我們爲選擇列表中的每個項目分配一個列別名。

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)。

+0

我現在很困惑 – Beck

+0

@Beck:看看我上面的例子。 –

+0

現在我被告知sport_ID是重複的列名稱 – Beck

相關問題