Sql 获取与当前配置文件匹配的随机配置文件

Sql 获取与当前配置文件匹配的随机配置文件,sql,left-join,inner-join,cross-join,Sql,Left Join,Inner Join,Cross Join,我试图获得3个与当前用户ID(本例中为orig.ID_user=6)具有相同性别ID的随机唯一配置文件,以及它们各自的评论 SELECT DISTINCT u.id_user, s.review FROM user AS u CROSS JOIN user AS orig ON orig.id_sex = u.id_sex INNER JOIN user_review AS s ON s.id_user_to = u.id_user WHERE orig.id_user = 6 ORDER BY

我试图获得3个与当前用户ID(本例中为orig.ID_user=6)具有相同性别ID的随机唯一配置文件,以及它们各自的评论

SELECT DISTINCT u.id_user, s.review
FROM user AS u
CROSS JOIN user AS orig ON orig.id_sex = u.id_sex
INNER JOIN user_review AS s ON s.id_user_to = u.id_user
WHERE orig.id_user = 6
ORDER BY RAND()
LIMIT 3
不知何故,id_user列显示重复的值。为什么?

更新(假设我有id\u性别值)

但这仍然会返回id_user_to列中的重复行,它们应该是唯一的值,因为不同

解决方案使用分组方式

SELECT us.id_user_to, us.review
FROM user_review AS us
LEFT JOIN user AS u ON u.id_user = us.id_user_to
WHERE u.id_sex = 2
GROUP BY us.id_user_to
ORDER BY RAND()
LIMIT 3

似乎可以正常运行,尽管还值得注意的是,带有
ON
子句的
交叉连接
只是一个
内部连接
,但我很惊讶地看到它会运行,我预计会出现语法错误。你能更新问题/sql FIDLE来重现问题吗?
DISTINCT
是关于u.id\u user和s.review的组合,因此这是由于多次审查。我修改了原始sql语句,假设我有id\u sex值,但不是在id\u user\u to中抛出唯一id,而是得到重复的值。为什么?
SELECT us.id_user_to, us.review
FROM user_review AS us
LEFT JOIN user AS u ON u.id_user = us.id_user_to
WHERE u.id_sex = 2
GROUP BY us.id_user_to
ORDER BY RAND()
LIMIT 3