我正在尝试对另一个查询的结果集运行查询,但是遇到了我无法理解的错误。我确定它有点小,但我不知何故错过了它。这是查询:
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个错误。
- 预计会有表达。 (靠近“(”在90号位置)
- 意外的令牌。 (靠近“(”在90号位置)
- 此类型的子句之前已被解析过。 (位于第95位的“SELECT”附近)
醇>
答案 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
中包含所有非聚合列。