2016-06-18 123 views
0

我想對另一個查詢的結果集運行查詢,但得到我無法理解的錯誤。我敢肯定它有點小,但我有點不知所措。這是查詢:查詢另一個查詢給出錯誤的結果

SELECT 
    RLID, 
    NAME, 
    GROUP_CONCAT(SUBQUERY.Items SEPARATOR ', ') AS Items 
FROM 
    (
    SELECT 
    `rel_menu_item`.`ID` AS `RLID`, 
    `menu`.`Name` AS `Menu_Name`, 
    `item`.`Name` AS `Items` 
    FROM 
    `rel_menu_item` 
    JOIN 
    `menu` ON `menu`.`ID` = `rel_menu_item`.`Menu_ID` 
    JOIN 
    `item` ON `item`.`ID` = `rel_menu_item`.`Item_ID` 
) AS SUBQUERY 
GROUP BY 
    SUBQUERY.Name 

錯誤:在分析過程中發現

3個錯誤。

  1. 表達預期。 (近 「(」 在位置90)
  2. 意外令牌。(近 「(」 在
  3. 這類條款先前被解析位置90)。(近 「選擇」 95位)
+3

它是'Menu_Name'而不是'Name' – wajeeh

回答

1

我發現錯誤,下面是正確的查詢:

SELECT 
    SUBQUERY.RLID, 
    SUBQUERY.Menu_Name, 
    GROUP_CONCAT(SUBQUERY.Items SEPARATOR ', ') AS Items 
FROM 
    (
    SELECT 
    rel_menu_item.ID AS RLID, 
    menu.Name AS Menu_Name, 
    item.Name AS Items 
    FROM 
    rel_menu_item 
    JOIN 
    menu ON menu.ID = rel_menu_item.Menu_ID 
    JOIN 
    item ON item.ID = rel_menu_item.Item_ID 
) AS SUBQUERY 
GROUP BY 
    SUBQUERY.Menu_Name 
+1

我不明白你爲什麼有一個子查詢。 – Strawberry

0

你應該沒有一個子查詢都可以寫這個查詢:

SELECT m.Id as RLID, m.Name as Menu_Name 
     GROUP_CONCAT(i.name SEPARATOR ', ') AS Items 
FROM rel_menu_item rmi JOIN 
    menu m 
    ON m.ID = rmi.Menu_ID JOIN 
    item i 
    ON i.ID = rmi.Item_ID 
GROUP BY m.Id, m.Name; 

注:不需要

  • 子查詢。
  • 表別名使查詢更易於編寫和閱讀。
  • 最好使用主鍵表menu.id中的列而不是引用外鍵。它對內連接沒有什麼影響,但它對外連接有所作用;因此,這是一個不好的做法。
  • 您應該包括全部GROUP BY中的非聚合列。
相關問題