有很多方法可以在mysql5上做预先连接,(我知道mysql8支持这个查询,但是,我使用的是mysql5),我早就知道我可以使用find_in_set来实现连接,但我怎么能像神谕那样实现兄弟姐妹的顺序呢?例如,这是测试数据E,我的实际数据是,id是guid就像
62CF6FFEDE064B00ADFF43ED0E6EFDDB
create table test(id varchar(10),ordernumber decimal,pid varchar(10));
insert into test values('62CF6',2,'');
insert into test values('44DF8',3,'D13A3');
insert into test values('DD43F',5,'62CF6');
insert into test values('E7832',2,'53FAA');
insert into test values('48728',4,'D13A3');
insert into test values('53FAA',4,'62CF6');
insert into test values('9038A',1,'53FAA');
insert into test values('F5C7E',2,'D13A3');
insert into test values('D13A3',1,'');
在oracle中可以使用
starts with pid is null connect by prior id=pid order siblings by ordernumber asd
得到这个结果
id ordernumber pid
D13A3 1
F5C7E 2 D13A3
44DF8 3 D13A3
48728 4 D13A3
62CF6 2
53FAA 4 62CF6
9038A 1 53FAA
E7832 2 53FAA
DD43F 5 62CF6
由于级别未知,我只能使用类似的程序只是示例代码,不能真正运行。
create procedure test_p(in p varchar(100))
begin
declare aa varchar;
declare unit_cur cursor for select id from table where pid=p;
open unit_cur
fetch unit_cur into aa
call test_p(aa);
那么,如果我有数百万个表要处理,我怎么能只做一个过程来处理类似的事情呢?
SELECT *
FROM test
ORDER BY CASE WHEN pid = ''
THEN id
ELSE pid
END,
ordernumber;
我已经更改了数据,我的真实id是guid - JokerSora
SELECT t1.*
FROM test t1
LEFT JOIN test t2 ON t1.pid = t2.id
ORDER BY CASE WHEN t1.pid = ''
THEN t1.ordernumber
ELSE t2.ordernumber
END,
t1.ordernumber;
https://dbfiddle.uk/?rdbms=mysql_8.0&小提琴= e3c01067da653f7ae5ce5c969d0bd57f