Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 是否打印sql中每个输出行旁边的字符串?_Mysql_Sql_Sql Server_Oracle - Fatal编程技术网

Mysql 是否打印sql中每个输出行旁边的字符串?

Mysql 是否打印sql中每个输出行旁边的字符串?,mysql,sql,sql-server,oracle,Mysql,Sql,Sql Server,Oracle,我一直在寻找这个问题的答案。我有一个名为“Tree”的表,其中包含节点的pid,另一列包含父pid(ppid)。该表包括: Pid Ppid 1 2 3 2 5 6 7 6 2 4 6 4 4 15 8 9 10 9 12 13 14 13 9 11 13 11 11

我一直在寻找这个问题的答案。我有一个名为“Tree”的表,其中包含节点的pid,另一列包含父pid(ppid)。该表包括:

Pid     Ppid
1           2
3           2
5           6
7           6
2           4
6           4
4           15
8           9
10      9
12      13
14      13
9           11
13      11
11      15
15      NULL
其目的是在使用Oracle/sql/sql server/etc的单个查询中,在Pid列旁边打印一条消息,说明节点的类型,即“叶”、“内部”或“根”。 输出应该是这样的:

1           Leaf
2           Inner
3           Leaf
4           Inner
5           Leaf
6           Inner
7           Leaf
8           Leaf
9           Inner
10      Leaf
11      Inner
12      Leaf
13      Inner
14      Leaf
15      Root
我只需要知道打印新列值的方法。有人能帮我吗?
提前感谢:)

SQL SERVER
Oracle
中,可以使用
递归CTE

这适用于
SQL SERVER

;WITH data
     AS (SELECT *
         FROM   (VALUES (1,2 ),
                        (3,2 ),
                        (5,6 ),
                        (7,6 ),
                        (2,4 ),
                        (6,4 ),
                        (4,15 ),
                        (8,9 ),
                        (10,9 ),
                        (12,13 ),
                        (14,13 ),
                        (9,11 ),
                        (13,11 ),
                        (11,15 ),
                        (15,NULL ) ) tc (Pid, Ppid)),
     rec_cte
     AS (SELECT *
         FROM   data
         UNION ALL
         SELECT d.*
         FROM   rec_cte rc
                JOIN data d
                  ON rc.Ppid = d.Pid)
--select * from rec_cte
    SELECT Pid,
           CASE Count(Ppid)
             WHEN 0 THEN 'root'
             WHEN 1 THEN 'leaf'
             ELSE 'inner'
           END level
    FROM   rec_cte
    GROUP  BY Pid 
结果:

╔═════╦═══════╗
║ Pid ║ level ║
╠═════╬═══════╣
║   1 ║ leaf  ║
║   2 ║ inner ║
║   3 ║ leaf  ║
║   4 ║ inner ║
║   5 ║ leaf  ║
║   6 ║ inner ║
║   7 ║ leaf  ║
║   8 ║ leaf  ║
║   9 ║ inner ║
║  10 ║ leaf  ║
║  11 ║ inner ║
║  12 ║ leaf  ║
║  13 ║ inner ║
║  14 ║ leaf  ║
║  15 ║ root  ║
╚═════╩═══════╝

所以,mysql、SQL Server或Oracle?在使用Oracle/SQL/SQL Server/etc的单个查询中选择一个,然后告诉我们您要去哪里,以及您停留在哪一个特定部分…任何,SQL、mysql、Oracle或SQL Server我甚至不知道如何开始,请帮助这里“数据”指的是表“树”?@PrakharSaxena-是的。。对于演示,我使用了表值构造函数。将其替换为表名如何跳过列名行?@PrakharSaxena列名行在哪里?@PrakharSaxena-在哪个DBMS中执行?