使用ID

时间:2018-11-09 10:34:17

标签: sql sql-server

我需要从所有数据库表中获取示例数据,有数百个表,但并不是所有表都可能相关。

有没有一种方法可以从顶级表中提供一个ID,以选择一行,还可以在子表中选择相应的数据行(如果存在数据)。

即给定一个ID,请在所有表格中选择该ID的所有数据,如果存在则仅返回数据。

例如而不是:

Select * from main_table where id = 1
Select * from next_table where master_id = 1
Select * from another_table where master_id = 1
Select * from sub_table where next_table.id = 5
Select * from this_table where sub_table.id = 9

1 个答案:

答案 0 :(得分:0)

我可以看到2种选择。

选项1:多个联接 您必须将main_table与其他必需的表连接起来,才能根据参考键从每个表中选择前1个。

declare @main_table_id int
set @main_table_id = 1

Select top 1 * from main_table where id = @main_table_id

Select top 1 nt.* 
from main_table mt
inner join next_table nt on mt.id = nt.master_id 
where mt.id = @main_table_id

Select top 1 at.* 
from main_table mt
inner join another_table at on mt.id = at.master_id 
where mt.id = @main_table_id

Select top 1 st.* 
from main_table mt
inner join next_table nt on mt.id = nt.master_id 
inner join sub_table st on st.next_table_id = nt.id
where mt.id = @main_table_id

Select top 1 st.* 
from main_table mt
inner join next_table nt on mt.id = nt.master_id 
inner join sub_table st on st.next_table_id = nt.id
inner join this_table tt on tt.sub_table_id = st.id
where mt.id = @main_table_id

选项2:存储过程样式 您将选择键并将其存储在变量中。最终可能会导致拥有大量的SQL变量。

declare @main_table_id int
set @main_table_id = 1

Select top 1 * from main_table where id = @main_table_id

declare @next_table_id int
select top 1 @next_table_id = id from next_table where master_id = @main_table_id
Select top 1 * from next_table where id = @next_table_id

Select top 1 * from another_table where master_id = @main_table_id

declare @sub_table_id int
select top 1 @sub_table_id = id from sub_table where next_table_id = @next_table_id
Select top 1 * from sub_table where id = @sub_table_id 

Select top 1 * from this_table where sub_table_id = @sub_table_id