MySQL:仅当存在特定用户id或用户id为空时获取结果

MySQL:仅当存在特定用户id或用户id为空时获取结果,mysql,sql,join,left-join,where-clause,Mysql,Sql,Join,Left Join,Where Clause,我们有两张桌子: 比赛 结果 我们需要显示比赛id,两个对手,比赛表中的日期和结果,结果表中的用户id。我们将按结果进行搜索,如果用户已经提交了结果,我们将显示他的id和结果。否则,我们只在这两个字段中显示null,但不能有任何其他用户的结果,而不是我们提供的结果。我提出了这个查询,但是如果没有提供一些已经提交结果的用户id,它不会显示所有的比赛 SELECT c.competition_id, c1.name AS first, c2.name AS second, c.date, r.r

我们有两张桌子:

  • 比赛
  • 结果
我们需要显示比赛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\u 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\u id
不是
NULL
。但是,用户id与您要查找的id也不匹配