如果返回不同,有人可以查看我的查询并提供帮助。我试图使用不同的值获取父表和子表中的所有值,并且可能没有链接和没有链接的记录
Create table Parent(Parentid VARCHAR(10), parentname varchar(15))
Insert into Parent
values (1, 'parent'), (2, 'parent2'), (3, 'parent3')
create table child
(
childid VARCHAR(10),
childname varchar(15),
parentfatherid VARCHAR(10),
parentmotherid VARCHAR(10)
)
insert into child
values (10, 'child1', 1, null),
(20, 'child2', null, null),
(30, 'child3', 2, null),
(40, 'child4', 1, null),
(50, 'child5', 2, null),
(60, 'child6', null, 2),
(70, 'child7', null, 3),
(50, 'child8', null, 1),
(60, 'child9', null, 2),
(70, 'child10', null, 3),
(80, 'child11', null, 1),
(NULL, NULL, NULL, NULL)
;with cte as
(
select
childid, childname, parentmotherid ,parentfatherid,
ROW_NUMBER() over (partition by parentmotherid order by parentmotherid) as rownumber
from
child
)
select
P.Parentid, p.parentname,
c.childid, c.childname, c.parentfatherid, c.parentmotherid
into
#tablea
from
cte C
inner join
Parent P on c.parentmotherid = p.Parentid
order by
C.rownumber
;with cte as
(
select
childid, childname, parentmotherid ,parentfatherid,
ROW_NUMBER() over (partition by parentfatherid order by parentfatherid) as rownumber
from
child
)
select
P.Parentid, p.parentname,
c.childid, c.childname, c.parentfatherid, c.parentmotherid
into
#tableb
from
cte C
inner join
Parent P on c.parentfatherid = p.Parentid
order by
C.rownumber
SELECT
P.Parentid, p.parentname,
A.childid, A.childname, A.parentfatherid, A.parentmotherid
INTO
#tableC
FROM
child A, Parent p
WHERE
(A.childid IS NULL OR A.childid = '') AND
(A.childname IS NULL OR A.childname = '') AND
(A.parentfatherid IS NULL OR A.parentfatherid = '') AND
(A.parentmotherid IS NULL OR A.parentmotherid = '')
;with cte3 as
(
select *
from #tablea
union
select *
from #tableb
union
select *
from #tableC
)
select
cte3.Parentid, cte3.parentname,
cte3.childid, cte3.childname, cte3.parentfatherid, cte3.parentmotherid,
ROW_NUMBER() over (partition by cte3.parentid,cte3.parentname order by cte3.parentid, cte3.parentname) as Finalrow
into
#Final
from
cte3
Update #Final
set PARENTID = '', parentname = ''
where Finalrow != 1
INSERT INTO #Final
SELECT '', '', childid, childname, parentfatherid, parentmotherid, NULL
FROM child
WHERE childid IS NOT NULL
AND childname IS NOT NULL
AND parentfatherid IS NULL
AND parentmotherid IS NULL