查询另一个查询错误的结果

时间:2016-06-18 06:25:13

标签: mysql sql

我正在尝试对另一个查询的结果集运行查询,但是遇到了我无法理解的错误。我确定它有点小,但我不知何故错过了它。这是查询:

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号位置)
  4.   
  5. 此类型的子句之前已被解析过。 (位于第95位的“SELECT”附近)
  6.   

2 个答案:

答案 0 :(得分: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 :(得分: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中包含所有非聚合列。