我们有两个表:
- 比赛
- 结果
我们需要显示比赛 ID、两个对手、比赛表和结果中的日期、结果表中的用户 ID。我们将按结果搜索,如果用户已经提交了他的结果,那么我们将显示他的 ID 和结果。否则,我们只在这两个字段中显示 null,但除了我们提供的这一字段之外,不得有任何其他用户的任何结果。我提出了这个查询,但如果没有提供某些已经提交结果的用户 ID,它不会显示所有比赛。
SELECT c.competition_id, c1.name AS first, c2.name AS second, c.date, r.result_id, r.user_id
FROM competitions c
JOIN countries c1 ON c.first=c1.country_id
JOIN countries c2 ON c.second=c2.country_id
LEFT JOIN results r ON c.competition_id=r.competition_id
WHERE c.date='2013-07-04' AND (r.user_id=1 OR r.user_id IS NULL)
我必须做什么才能解决我的问题?
最佳答案
我认为您需要将 r.user_id
比较移至 on
子句中:
SELECT c.competition_id, c1.name AS first, c2.name AS second, c.date, r.result_id, r.user_id
FROM competitions c
JOIN countries c1 ON c.first=c1.country_id
JOIN countries c2 ON c.second=c2.country_id
LEFT JOIN results r ON c.competition_id=r.competition_id and r.user_id = 1
WHERE c.date='2013-07-04'
这将保留所有竞赛,但仅返回给定用户的结果。
我相信您的查询正在过滤掉除用户之外的其他人提交的结果
。这是因为该行存在匹配项,因此 r.user_id
不是 NULL
。但是,该用户 ID 与您要查找的用户 ID 也不匹配。
关于MySQL:仅当存在特定用户 ID 或用户 ID 为空时才获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17475675/