扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:Arthur Fuller 2007年3月15日
关键字: SQL Server
这个方案完成了两个查询的合并。为了更明确的标识行源,我必须在清单E中包括一个初始列,这个初始列定义了源表。
我在Orders_1中增加了一行数据,这行数据是在Orders_2中找不到的。下面是结果集:
(No column name)OrderNo OrderDate OrderNumberOrderDate
T1 1 2007-02-23 00:00:00.0001 2007-02-23 00:00:00.000
T1 2 2007-02-24 00:00:00.0002 2007-02-24 00:00:00.000
T1 4 2007-02-26 00:00:00.000NULL NULL
T1 3011 2007-02-25 00:00:00.0003011 2007-02-25 00:00:00.000
T2 1 2007-02-23 00:00:00.0001 2007-02-23 00:00:00.000
T2 2 2007-02-24 00:00:00.0002 2007-02-24 00:00:00.000
T2 301 2007-02-24 00:00:00.000NULL NULL
T2 3011 2007-02-25 00:00:00.0003011 2007-02-25 00:00:00.000
这个查询清单的所有行都来自于这两张表。要解决我们最初的问题,这可能已经足够了,但我们真正关心的是不匹配的行。你可以在每个连接之前,先将清单与Null进行查询测试,这样就可以把清单中的记录减少到只有不匹配的行,如清单F所示。
这样你就得到了一个真正有用的结果集了:
(No column name)OrderNo OrderDate OrderNumberOrderDate
T1 4 2007-02-26 00:00:00.000NULL NULL
T2 301 2007-02-24 00:00:00.000NULL NULL
现在,你就可以为如何解决两个数据集的这个问题而做出明智的决定了。
注意实例:如果我假设几乎相同结构的表的话,保存信息是很简单的。在实践中,如果一个列名不同,另外一个(或更多)列名更有可能不同。列数可能也不同,但是那个问题超过了这个技巧的要解决的范围。我已经说明了一个在两个表之间确定差别的可靠方法,同时这个方法避免了使用NOT IN()来降低性能。
责任编辑:德东
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者