2016-06-18 7 views
0

Ich versuche, eine Abfrage auf die Ergebnismenge einer anderen Abfrage auszuführen, aber Fehler, die ich nicht verstehen kann. Ich bin sicher, es ist etwas Kleines, aber ich vermisse es irgendwie. Dies ist die Abfrage:Abfrage auf das Ergebnis einer anderen Abfrage mit Fehlern

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 

Fehler:

3 Fehler bei der Analyse gefunden wurden.

  1. Eine Expression wurde erwartet. (In der Nähe "(" an Position 90)
  2. unerwartetes Token. (In der Nähe "(" an Position 90)
  3. Diese Art der Klausel wurde zuvor analysiert. (In der Nähe "SELECT" an Position 95)
+3

es ist 'Menu_Name' nicht' Name' – wajeeh

Antwort

1

fand ich die Fehler hier die richtige Abfrage ist.

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

Ich verstehe nicht, warum Sie überhaupt eine Unterabfrage haben. – Strawberry

0

Sie sollten überhaupt ohne eine Unterabfrage diese Abfrage schreiben:

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; 

Hinweise:

  • Die Unterabfrage ist nicht erforderlich.
  • Tabellenaliasnamen erleichtern das Schreiben und Lesen der Abfrage.
  • Es ist besser, die Spalte aus der Primärschlüsseltabelle menu.id statt aus dem Verweis Fremdschlüssel zu verwenden. Es macht keinen wirklichen Unterschied mit inneren Joins, aber es macht einen Unterschied mit äußeren Joins; Daher ist es eine schlechte Übung.
  • Sie sollten alle nicht aggregierten Spalten in der GROUP BY einschließen.
Verwandte Themen