2016-06-18 7 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. 発現が予想された。 (
  2. )位置90において "(" 近予期しないトークン。(近 "(" 位置90における)
  3. 句のこのタイプは、以前に解析された。(位置95における "SELECT" 近傍)
+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に集計されていない列を含める必要があります。
関連する問題