我想要的:
SELECT u.username, u.last_activity
FROM users_userprofile
WHERE u.id IN (
SELECT DISTINCT(p.user_id) FROM forums_post p
WHERE p.thread_id = 423993
ORDER BY p.created_at DESC
LIMIT 4
);这不起作用,因为子查询中有LIMIT。我希望保持子查询的顺序,但我希望获得username和last_activity,而不是user_id。
有什么建议可以让我做到这一点吗?
发布于 2015-04-07 06:26:22
将子查询替换为视图:
CREATE VIEW subv AS SELECT p.user_id FROM forums_post p
WHERE p.thread_id = 423993
ORDER BY p.created_at DESC
LIMIT 4;
SELECT u.username, u.last_activity
FROM users_userprofile
WHERE u.id IN (SELECT * FROM subv);发布于 2015-04-07 06:29:18
你为什么不用JOIN来做呢?这似乎不会影响性能,因为WHERE和LIMIT子句是相同的。它不会JOIN整个表:
SELECT p.user_id, u.username, u.last_activity
FROM users_userprofile u
JOIN forums_post p ON p.user_id = u.id
WHERE p.thread_id = 423993
GROUP BY p.user_id ORDER BY MAX(p.created_at) DESC
LIMIT 4发布于 2015-04-07 06:37:10
您可以不使用where in,而是对表和子查询使用join
SELECT u.username, u.last_activity
FROM users_userprofile u
JOIN (
SELECT p.user_id FROM forums_post p
WHERE p.thread_id = 423993
ORDER BY p.created_at DESC
LIMIT 4
) q
on u.user_id=q.user_idhttps://stackoverflow.com/questions/29480614
复制相似问题