我想取两个表的并集。它们都有不相等的列数,其中一些是共同的,有些则不是。
我将如何在不使用单个列名的情况下将它们合并(在两者之间插入虚拟列)。
我必须查询并采用几个表的并集,并将在不同的数据库上进行测试,这些数据库对同一个表有不同的列名。因此,我无法使用寻址单个列名和插入虚拟列来获取联合的常用方法。
谢谢戈库尔。
我将如何在不使用单个列名称的情况下将它们联合起来
你不能。
使用 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);