繁体   English   中英

MySQL联接查询与where条件和不同的记录

[英]Mysql join query with where condition and distinct records

我有两个称为tc_revenuetc_rates表。

  • tc_revenue包含:-代码,收入,startDate,endDate
  • tc_rate包含:-代码,层,支出,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次

谢谢

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

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条代码为100的记录,则将获得5乘以2的结果,即左右匹配行之间的所有组合。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM