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