SQL:如何从包含指定列的多个表中选择值

时间:2014-11-12 00:17:10

标签: mysql postgresql

我想询问是否有人知道如何从具有指定列的多个表中获取所有值。

例如我有五个表(t1 ... t5),但只有t2,t3,t4包含列'a' - 如果我不知道哪些表包含它,我如何得到'a'的所有值?< / p>

我想主要针对MySQL解决方案(但也适用于PostgreSQL)。

感谢。

1 个答案:

答案 0 :(得分:0)

这应该找到SQL服务器上的所有列。只需在第一个注释区域中设置列名称。

测试我的测试区域。

然后使用以下注释切换打印查询并执行查询。

 declare @tab table (id int identity(1,1) primary KEY
 ,TABLE_CATALOG varchar(50)
 ,TABLE_SCHEMA varchar(50)
 ,TABLE_NAME varchar(50)
 ,COLUMN_NAME varchar(50))
insert into @tab(TABLE_CATALOG ,
        TABLE_SCHEMA ,
        TABLE_NAME,
        COLUMN_NAME)
-------    Test me
SELECT  TABLE_CATALOG ,
        TABLE_SCHEMA ,
        TABLE_NAME,
        COLUMN_NAME
FROM    INFORMATION_SCHEMA.COLUMNS
-- Set the Column Name you are looking for.
WHERE   COLUMN_NAME = 'name'
----
ORDER BY TABLE_NAME
---- Test me endline

declare @sql varchar(8000), @i int,@count INT
, @TABLE_CATALOG varchar(50)
,@TABLE_SCHEMA varchar(50)
,@TABLE_NAME varchar(50) 
,@COLUMN_NAME varchar(50) 

set @i=1
select @count= count(*) from @tab
while @i <= @count

begin
select @TABLE_CATALOG=TABLE_CATALOG
,@TABLE_SCHEMA=TABLE_SCHEMA
,@TABLE_NAME=TABLE_NAME
,@COLUMN_NAME=COLUMN_NAME
 from @tab where id=@i 

set @sql = '
  SELECT '+@COLUMN_NAME+' AS Column_Name,*
 FROM ['+@TABLE_CATALOG+'].['+@TABLE_SCHEMA+'].['+@TABLE_NAME+']
'

--To Print the SQL Queries to the screen 
print @sql

-- Uncomment and comment the Print Above to excute them.
--exec (@sql)

set @i=@i+1
end