php - MySQL 双表 INNER JOIN , LEFT JOINED 到第三张表,只有一行具有最低值
问题描述
我四处搜索,找到了我正在寻找的一个近乎示例,但它在我的情况下不起作用。
我有一个在两个表上执行 INNER JOIN 的查询,这个连接极大地限制了我的整个数据集。然后我想 LEFT JOIN 到第三张表上,但我只想要第三张表中的一条记录。左连接的原因是因为并非 INNER JOIN 的每个结果在第三张表中都有匹配项。像这样的东西:
SELECT DISTINCT t1.code, t2.id, t2.code, t3.id, t3.source_title, t3.display_order
FROM table1 t1
INNER JOIN table2 t2 ON t2.code=t1.code AND t2.type=0
LEFT JOIN table3 t3 ON t3.code=t1.code
ORDER BY t1.code, t3.display_order
此查询返回的记录太多,因为第三个表包含多个具有匹配代码的记录。我只想要与最低display_order值匹配的第一个,不幸的是,我不能将记录限制为 display_order=1,因为最低显示顺序并不总是一个。
重要提示:此查询返回的 t3.id 值(如果有)必须对应于具有最低 display_order 值的记录。即,如果查询正确返回最低的 display_order 值但 t3.id 值对应于表 3 中的其他记录,则它将不起作用。
这甚至可能吗?任何帮助将非常感激。
编辑:根据尼克的建议,我已经尝试过了,这似乎有效。我会做一些验证并报告:
SELECT DISTINCT t1.code, t2.*, sq.id, sq.source_title, sq.display_order
FROM table1 t1
INNER JOIN table2 p ON t2.code=t1.code AND t2.type=0
LEFT JOIN (
SELECT t3.*
FROM table3 t3
WHERE t3.display_order=(
SELECT MIN(display_order)
FROM table3 t3a
WHERE t3a.code = t3.code
)
) sq ON sq.code=t1.code
ORDER BY t1.code, sq.display_order
解决方案
table3
你应该可以LEFT JOIN
用
(SELECT *
FROM table3 t3
WHERE display_order = (SELECT MIN(display_order)
FROM table3 t3a
WHERE t3a.code = t3.code)
) t3
推荐阅读
- javascript - 如何将消息发布到 iFrame 中?
- c# - 如何为两个几乎相同的应用程序删除 IoC 容器中的重复项?
- php - PHP在爆炸时检查字符串是否包含某些单词
- python - 有没有办法让 Canvas 每次在输入字段中输入数据时更新?
- python - 如何将维度添加到 numpy 数组并从另一个 numpy 数组复制维度
- java - 如何将 javaFX 14 应用程序导出到 IntelliJ 中的可执行文件?
- tensorflow - Tensorflow 访问带有 tensorflow 索引的张量
- mongodb - 我的 mongod 服务器不工作,显示关闭代码:100
- ios - Swift 泛型 - 无法显式特化泛型函数
- analytics - 道琼斯指数数据仓库 - 尺寸正确?