[英]Not able to get distinct and max of the third table join in MySql
Schemas
// First table
CREATE TABLE assignments (
id int,
uid int,
comments varchar(255),
assignmentdate date,
status int
);
INSERT INTO assignments (id, uid, comments, assignmentdate, status)
values (1, 6, 'a', '2019-07-15', 0), (2, 6, 'ab', '2019-07-15', 0),
(3, 6, 'abc', '2019-07-14', 0), (4, 6, 'abc', '2019-07-14', 1)
, (5, 7, 'xyz', '2019-07-14', 1), (6, 7, 'zyx', '2019-07-14', 1);
// Second table
CREATE TABLE users (
id int,
username varchar(255),
status int
);
INSERT INTO users (id, username, status)
values (6, 'user1', 0), (7, 'user2', 0),
(8, 'user3', 1);
// Third table
CREATE TABLE user_images (
id int,
uid int,
imagename varchar(255),
status int
);
INSERT INTO user_images (id, uid, imagename, status)
values (1, 6, 'abc.jpeg', 0), (2, 6, 'def.jpeg', 0), (3, 8, 'ghi.png', 1);
我在这里寻找的是获得1)不同的和最新的表分配行,2)连接表用户并获得一行然后加入,3)表user_images的不同和最新行。
到目前为止,我已经完成了这个答案
我的试用查询:
SELECT
p.*,
u.username,
groupedpi.*
FROM
assignments p
INNER JOIN(
SELECT
comments,
MAX(id) AS latest
FROM
assignments
WHERE
STATUS
= 0
GROUP BY
uid
) AS groupedp
ON
groupedp.latest = p.id
LEFT JOIN users u ON
p.uid = u.id AND u.status = 0
LEFT JOIN(
SELECT
uid,
MAX(id) AS latesti,
imagename
FROM
user_images us
WHERE
STATUS = 0
GROUP BY
uid
order by id desc LIMIT 1
) AS groupedpi
ON
groupedpi.uid = p.uid
第三个结果我没有得到,即我在加入时没有获得第三张桌子的distinct
和latest record
。 而不是abc.jpeg
,我想得到def.jpeg
。
MySQL在这里绊倒你,因为如果没有指定它们会自动向GROUP BY添加列,所以它也会将groupspi子查询分组到imagename上 - 这将导致重复的行。 从子查询中删除imagename列(order by子句也无关紧要)并让它只输出userid和max image id
如果你想要图像名称,再次在images.id = groupedpi.latesti
上加入images表(在主查询中不是找到最新图像id的子查询)
(请注意,您的屏幕截图显示的是lastesti 2,但是imagename abc-它不是正确的配对.ID 2是def.jpg。当您想要最新的Id以及来自同一行的其他数据时,除非您使用,否则无法在一次点击中执行此操作解析(mysql8 +) - 您必须编写一个子查询来查找最大ID,然后将其连接回同一个表以从该行获取其余数据)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.