【问题标题】:inner join on different qaunties不同数量的内部连接
【发布时间】:2013-01-21 15:20:44
【问题描述】:

我的 SQL 数据库中有两个相同的表,这些表分别由项目代码和数量组成。

我需要查看两个表格中的哪些商品数量不同,以及哪些商品数量不同

其他表中不存在

我尝试在 ITEMCODE=ITEMCODE AND QTYQTY 上使用 FULL OUTER JOIN

它不工作

我得到的结果是这样的:

http://www.sendspace.com/file/nmb7yu

【问题讨论】:

  • 它不工作是什么意思?您收到错误消息吗?错误的结果?还有什么?请发布几行示例数据(涵盖所有可能的情况)和期望的结果,以便我们确切知道您的目标。
  • @AaronBertrand 你可以从我刚刚添加的链接下载结果集
  • 至少说一下为什么投反对票:@
  • 好吧,有两个人(不是我)投了反对票,根据我评论的赞成票,可以合理地假设他们认为您的问题不够清楚或包含的内容不够多细节来解决。回答者猜到了您的期望,但即使是关于您当前获得的附加信息也不能表明这与您期望获得的有什么不同。

标签: sql-server outer-join


【解决方案1】:

试试这样的:

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 子句中对不等式进行了测试,因此您隐式只包括两个表中的项目。这样,您可以包含一个表中的项目,而不是另一个表中的项目,或者数量不同。

【讨论】:

  • WKordos 答案可能会表现得更好,仅供参考。由于联合和左外连接,我提供的联合将导致更多读取。
【解决方案2】:
select *
from table1 a full outer join table2 b 
on a.code = b.code 
where a.qty <> b.qty or a.code is null or b.code is null

我的幸运猜测是您过滤掉了代码列为空的行

【讨论】:

    猜你喜欢
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 2016-12-15
    相关资源
    最近更新 更多