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

时间:2017-06-28 13:36:07

标签: sql sql-server

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

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

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

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

2 个答案:

答案 0 :(得分:1)

您可以尝试将表连接在一起。首先创建存储输入的临时表。然后使用此临时表连接表以获取所需的所有记录。当表中没有该文件名的记录时,您将获得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

答案 1 :(得分:0)

这也应该有效:

EXEC sp_MSforeachtable 
@command1='SELECT * FROM ? where filename = ''someValue''',
@whereand='AND o.id in (select object_id from sys.tables where name in (''Table1'',''Table2'',''Table3''))'