在同一服务器上查询不同数据库中的表

时间:2017-03-15 15:52:18

标签: sql sql-server select

我遇到了两个我遇到的查询,他们似乎都返回了不同的结果。

SELECT * 
FROM [Log].[dbo].[LogTable] AS MainLog, [Archive].[dbo].[LogTable] 
ORDER BY [Log].[dbo].[LogTable] DESC;

SELECT * 
FROM [Log].[dbo].[LogTable] 
UNION ALL
SELECT *
FROM [Archive].[dbo].[LogTable] 
ORDER BY [Log].[dbo].[LogTable] DESC;

第二个查询返回了正确的行数。它也正确地订购了。第一个查询带回了很多行,第一个查询究竟做了什么?它没有错误,它确实合并了数据。

2 个答案:

答案 0 :(得分:0)

如果不指定要加入的列和列,则表示您正在执行交叉连接。第二个查询是从每个表中选择记录并将结果连接在一起。

答案 1 :(得分:0)

您在查询一中获得的内容称为笛卡尔积。让我们一步一步阅读您的查询

  • 访问两个数据库。
  • 在Archive and Log数据库中加入LogTable。
  • No Where子句或Join on Condition让位于Cross join
  • 交叉连接意味着如果您在Log中有a,b,c,在Archive DB中有1,2,3。 O / P将是a1,a2,a3,b1,b2,b3,c1,c2,c3。 (当然是排行)

    在第二个查询中,您只是一个接一个地编写两个语句的o / p。 A,B,C,1,2,3