Sql server 不同QUNITE上的内部联接
我的SQL数据库中有两个相同的表,这些表分别由项目代码和数量组成 我需要查看两个表中哪些项目的数量不同,哪些项目的数量不同 在另一个表中不存在 我尝试对ITEMCODE=ITEMCODE和QTYQTY使用完全外部联接 它不起作用 我得到的结果是这样的:Sql server 不同QUNITE上的内部联接,sql-server,outer-join,Sql Server,Outer Join,我的SQL数据库中有两个相同的表,这些表分别由项目代码和数量组成 我需要查看两个表中哪些项目的数量不同,哪些项目的数量不同 在另一个表中不存在 我尝试对ITEMCODE=ITEMCODE和QTYQTY使用完全外部联接 它不起作用 我得到的结果是这样的: 我的幸运猜测是,您过滤掉了代码列为null的行,请尝试以下操作: SELECT c.Code , t1.Code , t1.Qty , t2.Code , t2.Qty FROM
我的幸运猜测是,您过滤掉了代码列为null的行,请尝试以下操作:
SELECT c.Code ,
t1.Code ,
t1.Qty ,
t2.Code ,
t2.Qty
FROM ( SELECT Code
FROM dbo.Table1
UNION
SELECT Code
FROM dbo.Table2
) c
LEFT OUTER JOIN dbo.Table1 t1 ON c.Code = t1.Code
LEFT OUTER JOIN dbo.Table2 t2 ON c.Code = t2.Code
WHERE t1.Code IS NULL
OR t2.Code IS NULL
OR t1.Qty <> t2.Qty
因为在WHERE子句中有一个不平等性测试,所以只能隐式地包含两个表中的项。通过这种方式,您可以包含一个表中的项目,而不是另一个表中的项目,或者包含数量不同的项目。这是什么意思?你收到错误信息了吗?错误的结果?还有别的吗?请发布几行样本数据,涵盖所有可能的案例和期望的结果,以便我们确切地知道您的目标。@AaronBertrand您可以从我刚才添加的链接下载结果集,至少说明为什么会投反对票:@好吧,两个人不是我投了反对票,根据我评论的赞成票,有理由假设他们觉得你的问题不是很清楚,或者没有足够的细节来解决。回答者猜测了您的期望值,但即使是关于您当前获得的附加信息也无法表明这与您的期望值有何不同。WKERSO的答案可能会表现更好,仅供参考。由于union和left外部联接,我提供的union将导致更多读取。
SELECT c.Code ,
t1.Code ,
t1.Qty ,
t2.Code ,
t2.Qty
FROM ( SELECT Code
FROM dbo.Table1
UNION
SELECT Code
FROM dbo.Table2
) c
LEFT OUTER JOIN dbo.Table1 t1 ON c.Code = t1.Code
LEFT OUTER JOIN dbo.Table2 t2 ON c.Code = t2.Code
WHERE t1.Code IS NULL
OR t2.Code IS NULL
OR t1.Qty <> t2.Qty