sql – 当具有不同列数的5个表之一中存在值时选择行集

使用SQL Server,我需要从Filename列中包含’value’的任何表中返回整行(每个表包含一列),但这些表的列数不同,每个表都有唯一的列使用他们自己的特定数据类型(他们共有的唯一列名称/类型是我需要检查’value’的Filename列).

理想情况下,我可以做以下事情:
    SELECT * FROM Table1,Table2,Table3,Table4,Table5
    WHERE Filename =’someValue’
由于所有表共享文件名的相同列名.

我尝试使用Union但由于表的列数和数据类型不对齐而存在问题.
我也试过了我能找到的JOIN的每一个组合.

我确信这可以通过IF EXISTS完成,但这将是许多很多行,似乎是不必要的代码.希望有一个更优雅的解决方案.
提前致谢!

最佳答案 您可以尝试将表连接在一起.首先创建存储输入的临时表.然后使用此临时表连接表以获取所需的所有记录.当表中没有该文件名的记录时,您将获得NULL值.

create table Table1 (id int,value int);
insert into Table1 values (1,10)

create table Table2 (id int,value int);
insert into Table2 values (1,20)

create table Table3 (id int,value int);
insert into Table3 values (2,30)

这是查询本身

create table #tmp (id int)
insert into #tmp
values (1)

select t.id, t1.value, t2.value, t3.value from #tmp as t

left join Table1 as t1
on t.id = t1.id
left join Table2 as t2
on t.id = t2.id
left join Table3 as t3
on t.id = t3.id

这就是你得到的

id  value   value   value
 1     10      20    NULL
点赞