我错过了什么?MySQL 从第二个表中加入了最新的条目



我需要一双新鲜的眼睛来看待这个问题。我有两个表,其中一个有用户,第二个包含登录记录,每个用户有多个记录。我正在尝试做的是从第一个表中选择所有条目,并从第二个表中选择最新记录,例如,所有用户的列表,但仅显示最近的活动。这两个表在 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 应该是一件相对简单的事情,但它要么不返回任何内容,要么每次都返回完全不同的选择。

这是我第一次使用 JOIN - 我有错误的 JOIN 吗?我需要以不同的方式排序或分组吗?

感谢您的帮助。这必须很简单,因为Danny 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

您必须按 EXACTORDER BY 显示您希望按 desc 显示的列,例如ORDER BY last_login DESC

使用要排序的列更改last_login列,但必须先在SELECT之后声明last_login列。

如何用record_id替换 where 子句中的所有rid和腐蚀的子查询?

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);

在这里测试

相关内容

最新更新