我需要从所有数据库表中获取示例数据,有数百个表,但并不是所有表都可能相关。
有没有一种方法可以从顶级表中提供一个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
等
答案 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