我有两个名为tc_revenue
和tc_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;
但我正在重复记录,帮助我找到正确的解决方案。
例如:
在这个例子中,每个记录重复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子句添加更多条件,例如匹配日期?