我错过了什么?mysql左连接第二个表中的最新条目

nwlqm0z1  于 2021-06-19  发布在  Mysql
关注(0)|答案(3)|浏览(280)

我需要一双新的眼睛。我有两个表,其中一个有用户,第二个包含登录记录,每个用户有多个记录。我要做的是从第一个表中选择所有条目,从第二个表中选择最近的记录,例如,所有用户的列表,但只显示最近的活动。这两个表在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
   )

我已经搜索了一些类似问题的答案,并尝试了所有这些问题,但结果要么没有返回结果,要么只得到奇怪的结果(不一定是最新的结果)。两个表中的id都是自动递增的,所以我认为为特定用户获取唯一或最高的id应该是一件相对简单的事情,但是每次它要么不返回任何内容,要么返回完全不同的选择。
这是我第一次使用连接-我有错误的连接吗?我是否需要以不同的方式对事物进行排序或分组?
谢谢你的帮助。这一定很简单,因为这里出现的danny coulombe的答案似乎适用于其他用户。

r6vfmomb

r6vfmomb1#

全部换掉怎么样 rid 在where子句和腐 eclipse 子查询中 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);

在此处测试

im9ewurl

im9ewurl2#

您将需要一个子查询,我相信:
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
lndjwyie

lndjwyie3#

您必须按要按说明显示的列排序,例如按上次登录说明排序。
使用要订购的列更改最后一个\u登录列,但必须在选择后首先声明最后一个\u登录列。

相关问题