Mysql连接查询条件和不同记录的位置

时间:2016-12-08 03:08:57

标签: mysql sql join

我有两个名为tc_revenuetc_rates的表。

  • tc_revenue包含: - code,revenue,startDate,endDate
  • tc_rate包含: - code,tier,payout,startDate,endDate

现在我需要获取代码= 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;

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

例如:

enter image description here

在这个例子中,每个记录重复2次

由于

2 个答案:

答案 0 :(得分:0)

对于您需要的任何字段,请使用group by。例如,如果您希望每个代码有一行,那么:

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

答案 1 :(得分:0)

如果代码在两个表中都允许重复,并且您只使用代码执行连接,那么您将获得一个表中所有匹配行与另一个表中所有匹配行之间的cartessian产品。

如果你在第一张表中有5条代码为100的记录,在第二张表中有2条代码为100的记录,那么你将获得5次2次结果,以及左右匹配行之间的所有组合。

除非您在一个(或两个)表中有重复项,否则所有10个结果的字符串将来自一个表,另一个或两者。

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

这是联接的工作原理,无论如何,如果数据库没有生成所有组合并让你决定where子句,那么数据库应该如何决定要合并哪些行?

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