SQL UNION不使用单个列名称

时间:2012-06-28 19:26:27

标签: sql-server

我想采用两个表的联合。它们的列数不等,有些是共同的,有些则不是。

如何在不使用单个列名称(在其间插入虚拟列)的情况下使用它们。

我必须查询并获取几个表的并集,并将在不同的数据库上进行测试,这些数据库对于同一个表具有不同的列名。 因此,我无法使用寻址单个列名称和插入虚拟列的常用方法来获得联合。

谢谢, 戈库尔。

2 个答案:

答案 0 :(得分:3)

  

如何在不使用单个列名称的情况下将其联合起来

你不能。

使用UNION时,列的数量和类型必须匹配。

答案 1 :(得分:2)

您可以通过检查SELECT...UNION...SELECT所涉及的两个(或更多)表来合成相应的INFORMATION_SCHEMA.COLUMNS语句。使用列,您可以构建SQL,以便只包含公共列。

使用T-SQL:

SELECT  COLUMN_NAME
FROM    INFORMATION_SCHEMA.COLUMNS
WHERE   TABLE_NAME = 'FirstTable'
UNION
SELECT  COLUMN_NAME
FROM    INFORMATION_SCHEMA.COLUMNS
WHERE   TABLE_NAME = 'SecondTable'

以C#为例描述逻辑:

List<string> sharedColumnNames = CallTheAforementionedSql();
string unionStatement = string.Format(
  "SELECT [{0}] FROM FirstTable UNION SELECT [{0}] FROM SecondTable",
  string.Join("],[", shareColumnNames.ToArray())
);

var stuff = ExecuteSql(unionStatement);