繁体   English   中英

无法在MySql中获得第三个表连接的不同和最大值

[英]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 

输出: 在此输入图像描述

第三个结果我没有得到,即我在加入时没有获得第三张桌子的distinctlatest 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.

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