Tables
__________________ ________________________________
|______name________| |____________scores______________|
|___id___|__name___| |_id_|_user-id_|_name-id_|_score_|
| 1 | bob | | 1 | 3 | 1 | 5 |
| 2 | susan | | 2 | 1 | 3 | 4 |
| 3 | geoff | | 3 | 3 | 2 | 3 |
| 4 | larry | | 4 | 2 | 4 | 5 |
| 5 | peter | | 5 | 1 | 1 | 0 |
-------------------- ----------------------------------
我正在寻找一个从'名称'中返回RANDOM名称的查询。表,用户目前尚未得分。
所以给定的用户' 1'例如,它可以归还苏珊,拉里或彼得。作为用户' 1'还没给他们一个分数。
SELECT *
FROM names
LEFT JOIN
votes
ON names.id = votes.name_id
WHERE votes.user_id = 1
AND (votes.score IS NULL);
到目前为止,我有这个,但它似乎没有像我想的那样工作
(atm它不会随机返回,但所有,但这是错误的)
任何帮助,将不胜感激。
答案 0 :(得分:1)
如果要对外连接表的某些字段进行过滤,则连接类型会自动更改为内部。在你的情况下它的条件
votes.user_id = 1
所以你需要将这个条件从WHERE移动到ON
SELECT *
FROM names
LEFT JOIN
votes
ON names.id = votes.name_id and votes.user_id = 1
WHERE (votes.score IS NULL);
答案 1 :(得分:0)
您可以申请:
SELECT name FROM name join scores on name.id=scores.user_id WHERE scores.score=0
答案 2 :(得分:0)
考虑将条件从OUTER JOIN
移至INNER JOIN
子句,因为您执行LEFT JOIN votes
ON names.id = votes.name_id
AND votes.user_id = 1
WHERE votes.score IS NULL
ORDER BY RAND();
其他效果与{{1}}相同
{{1}}
答案 3 :(得分:0)
您可以将其作为子查询执行
SELECT *
FROM names
WHERE id NOT IN (SELECT name_id FROM votes WHERE user_id=1)
ORDER BY RAND()
LIMIT 1