繁体   English   中英

我想念什么? MySQL从第二张表中退出加入最新条目

[英]What Am I Missing? MySQL Left Join Most Newest Entry From 2nd Table

我需要一双新鲜的眼睛。 我有两个表,一个表有用户,第二个表包含登录记录,每个用户有多个记录。 我想做的是从第一个表中选择所有条目,并从第二个表中选择最新记录,例如,所有用户的列表,但仅显示最新活动。 这两个表在ID列中都有自动递增。

因此,我的代码当前为:

SELECT u.user_id, u.name, u.email, r.rid, r.user_id
FROM users AS u
LEFT JOIN login_records AS r ON r.user_id = u.user_id
WHERE
   r.rid = (
      SELECT MAX( rid )
      FROM login_records
      WHERE user_id = u.user_id
   )

我在SO上搜索了类似问题的答案并尝试了所有问题,但是结果要么不返回任何结果,要么仅得到奇怪的结果(不一定是最新的结果)。 两个表中的ID都是自动递增的,因此我认为获取特定用户的唯一ID或最高ID是相对简单的事情,但是每次都不返回或完全不同。

这是我第一次使用JOIN-我输入的JOIN错误吗? 我是否需要对商品进行订购或分组?

谢谢你的帮助。 这一定是简单的东西,因为丹尼Coulombe的答案出现在这里似乎对其他用户的工作。

我相信您将需要一个子查询:

https://www.db-fiddle.com/f/2wudMDVxReYJz4FEyG19Va/0

CREATE TABLE users (
user_id  INT UNSIGNED NOT NULL 
  AUTO_INCREMENT PRIMARY KEY
);

CREATE TABLE users_logins (
user_login_id  INT UNSIGNED NOT NULL 
  AUTO_INCREMENT PRIMARY KEY,
  user_id  INT UNSIGNED NOT NULL 
);

INSERT INTO users SELECT 1;
INSERT INTO users SELECT 2;

INSERT INTO users_logins SELECT 1,1;
INSERT INTO users_logins SELECT 2,1;
INSERT INTO users_logins SELECT 3,1;
INSERT INTO users_logins SELECT 4,1;
INSERT INTO users_logins SELECT 5,2;
INSERT INTO users_logins SELECT 6,2;

和查询:

SELECT 
u.user_id, ul.latest_login_id
FROM users u
    LEFT JOIN
    (
      SELECT user_id, MAX(user_login_id) latest_login_id
      FROM users_logins
      GROUP BY user_id
    ) ul ON u.user_id = ul.user_id

如何更换所有rid在where子句和corrolated子查询record_id

SELECT u.user_id, u.name, u.email, r.rid, r.record_id, r.user_id
FROM test_users AS u
LEFT JOIN test_login_records AS r ON r.user_id = u.user_id
WHERE 
 (r.record_id = (
   SELECT MAX(record_id)
   FROM test_login_records
      WHERE user_id = u.user_id
  ) OR r.record_id is null);

在这里测试

您必须对要按 desc显示的列进行ORDER BY ,例如ORDER BY last_login DESC

用要订购的列更改last_login列,但是必须首先在SELECT之后声明last_login列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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