mysql - 如何将左连接限制为仅 1 行?没有子查询?
问题描述
我看过几个例子,但它们都使用子查询。我没有使用子查询。
ECLD(e) ECLD_REJECTIONS(er)
id | id | ecld_id | role | for
1 | 1 | 1 | 4 | 3
2 | 2 | 1 | 5 | 3
SELECT
e.id,
er.id,er.role
FROM ecld e
LEFT JOIN ecld_rejections er ON e.id = er.ecld_id AND er.for = '3'
WHERE e.project_no='5' OR e.project_no='4' ORDER BY er.id DESC
期望的结果是
1,2,5
目前得到
1,2,5
1,1,4
我必须只得到具有最高 id 的行,因此我的排序。我的查询成功查询了 id 2,然后是 1,但我怎样才能只返回 1 行?我不能放置“限制 1”,因为我需要查询多个匹配项,但只想在连接上返回 1 行。
有没有办法做到这一点?
解决方案
添加一个LIMIT 1
,当排序正确时
SELECT
e.id,
er.id,er.role
FROM ecld e
LEFT JOIN ecld_rejections er ON e.id = er.ecld_id AND er.for = '3'
WHERE e.project_no='5'
ORDER BY er.id DESC
LIMIT 1
这只会让你获得第一行
当您只希望加入的给您一行时,您可以
SELECT
e.id,
er.id,er.role
FROM ecld e
LEFT JOIN (SELECT id,ecld_id,role FROM ecld_rejections WHERE `for` = '3' ORDER BY id DESC LIMIT 1) er ON e.id = er.ecld_id
WHERE e.project_no='5'
ORDER BY er.id DESC
对于多个 eC_id id,您需要一个行号
SELECT
e.id,
er.id,er.role
FROM ecld e
LEFT JOIN (SELECT id,ecld_id,role, ROW_NUMBER() OVER(PARTITION BY ecld_id ORDER BY id DESC) rn FROM ecld_rejections WHERE `for` = '3' ) er ON e.id = er.ecld_id
WHERE e.project_no='5' and rn = 1
推荐阅读
- mysql - 删除表 WordPress 的最后一条记录
- python - 可以进行简单的财产委托吗?
- azure - 是否可以通过 REST API 列出 Azure 中的所有数据库
- python - 从熊猫数据框中获取重复值的位置
- android - 实施 'androidx.appcompat:appcompat:1.0.0'
- jmeter - Corda Enterprise 性能测试套件 - 启动 JMeter 客户端时出错
- git - 在 Invoke-Expression 字符串中使用变量
- spring - 在Spring批处理配置类中调用@BeforeStep在StepExecutionExecutionContext中添加入口
- javascript - 显示/保存与代码中没有位置的行关联的 NS 高级 pdf/html 模板时出错
- entity-framework-core-2.1 - Entityframework核心代码先迁移Complex类型