不使用单个列名的 SQL UNION

  • 本文关键字:SQL UNION 单个列 sql-server
  • 更新时间 :
  • 英文 :


我想取两个表的并集。它们都有不相等的列数,其中一些是共同的,有些则不是。

我将如何在不使用单个列名的情况下将它们合并(在两者之间插入虚拟列)。

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

谢谢戈库尔。

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

你不能。

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

您可以通过检查两个(或多个)表的INFORMATION_SCHEMA.COLUMNS来合成相应的 SELECT...UNION...SELECT 语句。 有了列,您可以构建 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);

最新更新