【问题标题】:Mysql join query with where condition and distinct recordsMysql join 查询与 where 条件和不同的记录
【发布时间】:2016-12-11 05:20:17
【问题描述】:

我有两个表,分别名为 tc_revenuetc_rates

  • tc_revenue 包含:- 代码、收入、开始日期、结束日期
  • tc_rate 包含:- 代码、等级、支付、开始日期、结束日期

现在我需要获取 code = 100 并且记录应该是唯一的记录..

我用过这个查询

SELECT * 
FROM task_code_rates 
LEFT JOIN task_code_revenue ON task_code_revenue.code = task_code_rates.code
WHERE task_code_rates.code = 105;

但是我得到重复记录帮助我找到正确的解决方案。

例如:

在本例中,每条记录重复 2 次​​p>

谢谢

【问题讨论】:

  • 你是什么意思“和记录应该是不同的”?请编辑问题并提供示例数据和所需结果。
  • distinct 意味着唯一。我有 5 条记录,代码 = 100。在第一个表中,在第二个表中我只有 2 个。唯一性将基于开始日期
  • 。 . 样本数据。这就是你表达真正意思的方式。
  • 如果您想获取所有列,那么我认为它本身是唯一的,因此它会返回所有记录,请发布数据以提高清晰度,并至少尝试从两个表中发布数据,其中代码 = 100

标签: mysql sql join


【解决方案1】:

对您需要唯一的任何字段使用分组依据。例如,如果您希望每个代码一行,则:

SELECT * FROM task_code_rates LEFT JOIN task_code_revenue ON task_code_revenue.code = task_code_rates.code
where task_code_rates.code = 105
group by task_code_revenue.code, task_code_revenue.tier

【讨论】:

  • 但这只会返回一条记录。我有 5 条记录,代码 = 100。在第一个表中,在第二个表中我只有 2 个。唯一性将基于开始日期
  • 我只是举个例子。选择您需要唯一的字段组合。如果您希望每个 startDate 有一行,请在 group by 中使用它。
  • 你能帮我查询一下吗
  • 当然可以,但您需要向我们提供更多信息。我们不知道你需要什么。也许您可以举一个数据示例,以及正确答案的示例。编辑主要问题,以便每个人都可以轻松知道您想要什么。
  • 您还没有告诉我们哪些列需要具有唯一性。但我做出了最好的猜测,并更新了查询。
【解决方案2】:

如果代码在两个表中都承认重复,并且您只使用代码执行连接,那么您将获得一个表中所有匹配行与另一个表中所有匹配行之间的笛卡尔积。

如果您在第一个表中有 5 条代码为 100 的记录,在第二个表中有 2 条代码为 100 的记录,您将得到 5 乘以 2 的结果,即左右匹配行之间的所有组合。

除非您在一个(或两个)表中存在重复项,否则所有 10 个结果在来自一个表、另一个表或两者的列中都会有所不同。

但是,如果您希望从第一个表中获得两个组合行和三行,第二个表列为空,则不会发生这种情况。

这就是连接的工作方式,无论如何,如果数据库没有生成所有组合并让您在 where 子句中决定,数据库应该如何决定要组合哪些行?

也许您需要在 ON 子句中添加更多条件,例如还要匹配日期?

【讨论】:

    猜你喜欢
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 2015-06-02
    • 1970-01-01
    • 2012-11-05
    • 2015-03-27
    • 1970-01-01
    相关资源
    最近更新 更多