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