mysql - 连接三个 MySQL 表并从一个表中获取最大值

标签 mysql sql join

我想加入三张 table 。

第一个是“用户”表。

+---------+--------------+---------+
|Id       |UserName      |blah     |
+---------+--------------+---------+
|1        |Amila         |blah     |
+---------+--------------+---------+
|2        |Kamal         |blah     |
+---------+--------------+---------+
|3        |Nuwan         |blah     |
+---------+--------------+---------+

第二个是“图像”表。它包含用户上传的所有图像。此外,如果 Type==PI 且最大 id 将是用户当前的个人资料图像。

+---------+--------------+---------+---------+
|Id       |Image         |Type     |User     |
+---------+--------------+---------+---------+
|1        |12358.jpg     |PI       |1        |
+---------+--------------+---------+---------+
|2        |12589.jpg     |PI       |2        |
+---------+--------------+---------+---------+
|3        |45862.jpg     |Other    |2        |
+---------+--------------+---------+---------+
|4        |35698.jpg     |PI       |1        |
+---------+--------------+---------+---------+

第三个“评论”表包含所有评论。

+---------+--------------+---------+
|Id       |Comment       |User     |
+---------+--------------+---------+
|1        |blah blah...  |1        |
+---------+--------------+---------+
|2        |blah blah...  |1        |
+---------+--------------+---------+
|3        |blah blah...  |2        |
+---------+--------------+---------+

我想做的是编写一个返回的查询

Users.Id、Users.UserName、Images.Image(最大 Id 和 Type==PI)、Comments.Id、Comments.Comment

基本上就是连接三个表。

这是我的代码

SELECT U.`Id`, U.`UserName`, I.`Image`, C.`Id`, C.`Comment` 
FROM `Users` U 
INNER JOIN `Images` I ON I.`Image` = (
    SELECT MAX(I.`Image`) FROM `Images` WHERE I.`User` = U.`Id`
) AND I.`Type` = 'PI' 
INNER JOIN `Comments` C ON C.`User` = U.`Id` 

但这会返回 Images 表中的所有图像。例如,它返回用户 1 的两张图像。我只需要最后上传的图像。

最佳答案

您需要对结果进行降序排序,将最后一个放在顶部,然后将结果限制为 1。类似这样的操作即可:

SELECT U.`Id`, U.`UserName`, I.`Image`, C.`Id`, C.`Comment`
FROM `Users` U
INNER JOIN `Images` I ON I.`User`=U.`Id`
INNER JOIN Comments c ON C.`User` = U.`Id`
WHERE I.`Id` IN ( SELECT MAX(`Id`) FROM `Images` GROUP BY `User` )
ORDER BY I.`Image` DESC
LIMIT 1

关于mysql - 连接三个 MySQL 表并从一个表中获取最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21219284/

相关文章:

MySQL LEFT JOIN 3 个表

php - 如何防止 PHP 中的 SQL 注入(inject)?

mysql - 将 "IN"替换为 JOIN 语句

date - Pandas :如何在偏移日期合并两个数据框?

mysql - 8000 万个地址。索引还是分区?

MySQL:选择逗号分隔列表的第一个元素

mysql - 列一对多关系的三个条件

mysql - 如何动态删除MySQL表中的外键?

php - 为什么我的 sql 计数打印字母文本?

php - 获取mysql中第三张表的数据