2016-06-18 127 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中的非聚合列。
相关问题