sql >> Database >  >> RDS >> Mysql

Proberen om alle kolommen met onderliggende records voor een bovenliggende record te retourneren

Je zou CSV kunnen gebruiken id's resultaat zoals:

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

Uitvoer:

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

BEWERKEN:

Als je ook de originele rij nodig hebt, kun je UNION ALL . gebruiken :

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. 3 methoden om alle indexen voor alle tabellen opnieuw op te bouwen met T-SQL in SQL Server-database

  2. PHP-webtoepassing:vraag over best practices voor mysql-databaseontwerp

  3. Aanroepen van de privéfunctie binnen de hoofdtekst van het pakket

  4. Een DDL maken voor een basislijn voor vliegroute