将父id连接到表id?

q5iwbnjs  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(265)

我有一个t-sql查询,看起来像这样:

SELECT
    Products.Description
FROM table1
INNER JOIN Products ON table1.ProductId = Products.ProductId
LEFT JOIN Product as categories ON Products.ParentId = categories.ProductId
WHERE table1.notes IS NULL
GROUP By Products.Description

注意:这些不是我实际的表名。 Products 看起来像这样:

ProductId  ParentId   Description
1          null       Shoes
2          1          Flip flops
3          1          Gym Shoes
4          null       Shirts
5          4          Tank Top

等等。 table1 数据:

table1Id   ProductId  notes
1          2          null
3          5          testing
5          3          note 123

我的目标是返回 Products ,其id在表1中。这是动态的,有时返回的内容可能包含10个父母及其子女,而其他时候只返回1个父母及其子女。关键是能够得到父母,而不是父母在家 table1 .
现在我只有孩子,没有父母。
我的预期结果如下:

Description
-----------
Shoes
Flip flops
Gym shoes
Shirts
Tank top
rdrgkggo

rdrgkggo1#

我想这就是你要找的。考虑到它是一个单一级别的父/子级,您可以执行一个简单的 union all .

declare @table1 table (table1id int, table2id int, notes nvarchar(max)); -- table1
declare @table2 table (table2id int, parentId int, [description] nvarchar(max)); -- Products

insert into @table1 (table1id, table2id, notes)
values (1, 1, null)
,(3, 5, 'testing')
,(5, 3, 'note 123');

insert into @table2 (table2id, parentId, [description]) 
values (1, null, 'Shoes')
,(2, 1, 'Flip Flops')
,(3, 1, 'Gym Shoes')
,(4, null, 'Shirts')
,(5, 4, 'Tank Top');

select T2.[description]
from @table1 T1
inner join @table2 T2 on T2.table2Id = T1.table2Id
where T1.notes is null
union all
select T2A.[description]
from @table1 T1
inner join @table2 T2 on T2.table2Id = T1.table2Id
inner join @table2 T2A on T2A.parentId = T2.table2Id
where T1.notes is null;

退货:

description
-----------
Shoes
Flip Flops
Gym Shoes

注:请注意数据设置,以便将来提问。这使得人们在不必设置测试数据的情况下回答问题更具吸引力。

相关问题