Sql 当使用单独的数据库连接查询时,如何选择一个标识字段,让我知道行来自哪个数据库?

Sql 当使用单独的数据库连接查询时,如何选择一个标识字段,让我知道行来自哪个数据库?,sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2012,我试图比较两个不同数据库(MainDB和OtherDb)中相同表(TestTable)之间的行,以查找特定字段(Field1)的数据差异 SQL查询在一组表上循环时动态生成。在识别差异方面,一切都很好,但我无法区分哪一行来自哪个数据库 SQL查询: SELECT DISTINCT Field1 FROM ( SELECT Field1 FROM ( SELECT Field1 FROM [MainDB].[dbo].[TestTable]

我试图比较两个不同数据库(
MainDB
OtherDb
)中相同表(
TestTable
)之间的行,以查找特定字段(
Field1
)的数据差异

SQL查询在一组表上循环时动态生成。在识别差异方面,一切都很好,但我无法区分哪一行来自哪个数据库

SQL查询:

SELECT DISTINCT Field1
FROM (
    SELECT Field1
    FROM (
        SELECT Field1
        FROM [MainDB].[dbo].[TestTable]
        where Field2 = 'company1'
        UNION ALL
        SELECT Field1
        FROM [OtherDB].[dbo].[TestTable]
        where Field2 = 'company1'
        ) UnionedTables
    GROUP BY Field1
    HAVING COUNT(*) < 2
    ) results
MainDB.dbo.TestTable
+---------------+----------+
|    Field1     |  Field2  |
+---------------+----------+
| duplicate     | company1 |
| unique maindb | company1 |
| misc data     | company2 |
+---------------+----------+
OtherDB.dbo.TestTable

OtherDB.dbo.TestTable
+----------------+----------+
|     Field1     |  Field2  |
+----------------+----------+
| duplicate      | company1 |
| unique otherdb | company1 |
| misc data      | company2 |
| misc data      | company3 |
| misc data      | company4 |
| misc data2     | company4 |
+----------------+----------+
电流输出

所需输出


这似乎是你想要的。只需将表示数据库原点的字符串添加到查询生成中即可生成:

SELECT DISTINCT Field1, [DB]
FROM (
    SELECT Field1, 'MainDB' as [DB] 
    FROM [MainDB].[dbo].[TestTable]
    where Field2 = 'company1' AND Field1 NOT IN (SELECT Field1 FROM [OtherDB].[dbo].[TestTable] where Field2 = 'company1')

    UNION ALL

    SELECT Field1, 'OtherDB' as [DB] 
    FROM [OtherDB].[dbo].[TestTable]
    where Field2 = 'company1' AND Field1 NOT IN (SELECT Field1 FROM [MainDB].[dbo].[TestTable] where Field2 = 'company1')
    ) as Results

如果不在Group子句中包含
DB
,则不能在查询中使用
Group By
,这使得它仅由DB唯一。这样,您可以使每个数据集都是唯一的,然后将它们合并,这样就不需要使用
分组方式

,只需在两个查询中添加一列即可在另一个查询中,Database1作为DatabaseName和Database2。我尝试了这个方法,它使所有行都变得不同并返回所有内容。啊,我知道这是可以做到的,但就是想不出怎么做。谢谢注意,
Database
是一个关键字,所以我把它改成了其他的东西。实际上,这使它不再是独立的,并导致所有行返回。你知道该怎么做吗?啊,我明白了,这群人让它这么做。正在发布编辑。似乎不需要使用此方法进行外部查询。您可以向每个联合查询添加分组依据。这里的缺点是,现在我们两次击中两个基本表。非常好!一个注意事项是,第二次选择时,您有
和NOT IN
,对于任何查看此答案的人来说,应该是
,字段1 NOT IN
+----------------+----------+
|     Field1     | Database |
+----------------+----------+
| unique maindb  | MainDB   |
| unique otherdb | OtherDB  |
+----------------+----------+
SELECT DISTINCT Field1, [DB]
FROM (
    SELECT Field1, 'MainDB' as [DB] 
    FROM [MainDB].[dbo].[TestTable]
    where Field2 = 'company1' AND Field1 NOT IN (SELECT Field1 FROM [OtherDB].[dbo].[TestTable] where Field2 = 'company1')

    UNION ALL

    SELECT Field1, 'OtherDB' as [DB] 
    FROM [OtherDB].[dbo].[TestTable]
    where Field2 = 'company1' AND Field1 NOT IN (SELECT Field1 FROM [MainDB].[dbo].[TestTable] where Field2 = 'company1')
    ) as Results