【问题标题】:SQL query, 2 tables, avoid duplicated resultsSQL查询,2张表,避免重复结果
【发布时间】:2014-04-24 21:49:23
【问题描述】:

表 1

NO_REG - ID

表 2

NO_REG - 包

表 1 包含的问题可以说是 3 个 ID,表 2 具有相同的 NO_REG 但在 BAGS 中只有 1 行

我愿意

SELECT BAGS, ID FROM TABLE 1 AS T1 INNER JOIN TABLE 2 AS T2 ON T1.NO_REG = T2.NO_REG

我明白了

NO_REG    ID - BAGS
123       999- 2
123       989- 2
123       979- 2

我需要

NO_REG    ID - BAGS
123       999- 2
123       989- NULL (or 0)
123       979- NULL (or 0)

希望我已经足够清楚了。

【问题讨论】:

  • 你为什么不知道你用的是哪个rdbms? sql-server != mysql 关于你的问题,你怎么知道哪个 id 和哪个包?如果 Table2 中有两条记录怎么办?如果 Table2 中的记录多于 Table1 中具有相同 id 的记录怎么办?请更清楚地了解此类边缘情况,尤其是因为您想要的确实非常规。
  • NO_REG 中的值是什么?
  • 抱歉忘记了,更新了帖子。
  • 还有第三张桌子吗?你怎么知道 BAG 2 属于 ID 999?这是什么规则?还有什么具体的规定吗?你有没有发现你使用的是 MySQL 还是 SQL Server? :)
  • 我使用 sql server,只有 2 个表 NO_REG(invoice #), ID(products), BAGS(bags used to dispatch those products) 问题在于每个产品(ID)行的袋子都是重复的。

标签: mysql sql sql-server


【解决方案1】:

您需要 LEFT JOIN 而不是 INNER JOIN 检索匹配值和 null 表示不匹配

有点像

SELECT BAGS, ID FROM TABLE 1 AS T1 LEFT JOIN TABLE 2 AS T2 ON T1.NO_REG = T2.NO_REG

【讨论】:

  • 这不是真的。将内连接更改为左连接并不会神奇地将给定结果转换为所需结果,即使使用 DISTINCT 也不行。
  • 但我认为@Olvatha 可能在正确的轨道上理解 OP 的意思而不是实际所说的。我怀疑这 3 个 ID 实际上并不都是 999。
  • @GolezTrol 这不是魔法。所显示的示例指向给定的解决方案。正如 danny 所说,3 个 ID 可能不一样
  • 如果你说的是真的,那么第一个输出将只输出 1 条记录而不是 3 条记录。你为每个 ID 获得一个 BAG 的事实意味着已经有匹配的记录,所以改变 INNER JOIN to LEFT JOIN 不会改变这一点。它可能导致更多记录,但您已经获得的记录保持不变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-06
  • 2018-05-03
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多