【问题标题】:joining 3 tables in sql server 2012 gives me duplicate records在 sql server 2012 中加入 3 个表给了我重复的记录
【发布时间】:2019-08-14 11:30:04
【问题描述】:

我有三个表与左外连接连接,我需要检查两个表中的两列,但在右表中,我从同一列中获得了不止一条记录,所以我只想记录存在的值,不值 '0' 记录。

我有 3 张桌子

为此,我已经使这个查询结果几乎就在那里,但它返回了重复的行。 这是我的 SQL 查询

SELECT PWA.DT,
       P.MOULDCODE AS DieNo, 
       T.AssemblyWt AS AWT,
       T.WaxWt AS WWt,
       T.CoreWt AS CWT
FROM PRCWaxAss PWA
     LEFT OUTER JOIN PRC P ON PWA.PRCNO = P.PRCNO
     LEFT OUTER JOIN TDCWaxView T ON (P.MOULDCODE = T.DieNo)
                                 AND (P.METALCODE = T.MetalCode
                                   OR T.MetalCode = '0');

这是我的输出

“TDC”表和“PRC”表与左外连接我已经比较了两个表中的“die no”和“metal code”如果两者都在 PRC 表中匹配,那么它可以,但如果不匹配“金属代码”然后我需要在 TDC 中将记录“金属代码”值显示为“0”。在输出图像红色突出显示的行中我不想要。 任何人都可以帮助我..提前谢谢你。

【问题讨论】:

  • 我在你的输出中没有看到重复
  • 我已经为您完成了,但我强烈建议您不要将 SQL 写在一行上;它使人无法阅读。 良好使用换行符和空格可以使任何语言(不仅仅是 SQL)更易于他人和您自己阅读。关于您的数据,请不要以图片形式提供;那些你寻求帮助的人不能在没有转录的情况下使用它们。请花时间以表格格式text 或 DDL 和 DML 语句的形式发布您的数据。
  • 副本在哪里?
  • @Cetin Basoz .. 我在输出红色突出显示的行中编辑了我不想要的问题
  • 这是给你不想要的线路。 (P.METALCODE = T.MetalCode OR T.MetalCode = '0'),改为T.METALCODE = CASE WHEN P.MetalCode = T.MetalCode THEN P.MetalCode ELSE '0' END

标签: sql-server join sql-server-2012


【解决方案1】:

OR 条件为您提供不想要的多行输出。

试一试,它应该会给你想要的东西。

替换此行(P.METALCODE = T.MetalCode OR T.MetalCode = '0')

有了这个T.METALCODE = CASE WHEN P.MetalCode = T.MetalCode THEN P.MetalCode ELSE '0' END

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-05
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多