我想连接两个表并从第二个表返回一个随机字段,因为连接时有多个匹配项。
例如。我有一个 users
表和一个 user_posts
表。我想选择每个用户的 id
,以及他们在 user_posts
中的随机帖子 id
和帖子的 message
> 表。每个用户可以在 user_posts
表中拥有多个帖子。
This answer解释了我正在尝试做什么,但它不起作用。这是我的查询:
SELECT user_id, post_id, message FROM (
SELECT users.id AS user_id, user_posts.id AS post_id, message
FROM users INNER JOIN user_posts ON users.id = user_id
ORDER BY RAND()
) AS a GROUP BY user_id
为了测试,我在 user_posts
表中为 id
为 1 的用户添加了两行,但每次都会检索相同的帖子。
最佳答案
使用交叉应用随机获取一篇帖子并加入到用户中显示
select u.id,RandomPostbyUser.*
from users u
cross apply (
SELECT user_posts.id AS post_id, message
FROM users u1 INNER JOIN user_posts ON u1.id = u.id
order by RAND()
LIMIT 1) RandomPostbyUser
关于MySQL 连接并选择随机字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43533162/