sql >> Databáze >  >> RDS >> Mysql

Pokus o vrácení všech sloupců podřízených záznamů pro nadřazený záznam

Můžete použít CSV id výsledek jako:

SELECT *
FROM tblreport
WHERE FIND_IN_SET(ID,(SELECT GROUP_CONCAT(lv SEPARATOR ',') FROM (
                     SELECT @pv:=(SELECT GROUP_CONCAT(ID SEPARATOR ',') 
                     FROM tblreport WHERE ParentID IN (@pv)) AS lv FROM tblreport
                     JOIN (SELECT @pv:=1)tmp
                       WHERE ParentID IN (@pv)) a));

DBFiddle Demo

Výstup:

ID  Name    ParentID
2   2nd     1
3   3rd     1
4   4th     2

UPRAVIT:

Pokud potřebujete také původní řádek, můžete použít UNION ALL :

SET @var = 1;

SELECT *
FROM tblreport
WHERE FIND_IN_SET(ID,(SELECT GROUP_CONCAT(lv SEPARATOR ',') FROM (
                     SELECT @pv:=(SELECT GROUP_CONCAT(ID SEPARATOR ',') 
                     FROM tblreport WHERE ParentID IN (@pv)) AS lv FROM tblreport
                     JOIN (SELECT @pv:[email protected])tmp
                       WHERE ParentID IN (@pv)) a))

UNION ALL
SELECT *
FROM tblReport
WHERE ID = @var
ORDER BY ID;

DBFiddle Demo2



  1. MySql Jak používat DATE_SUB v klauzuli Between

  2. Nastavte opakující se hodnotu na 0, přičemž první hodnotu ponechte samotnou

  3. Volání nedefinované metody Closure::query()

  4. Brána PL/SQL v R11i