我们有两张桌子:
我们需要显示比赛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)
我该怎么做才能解决我的问题?
答案 0 :(得分:1)
我认为您需要将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'
这将保留所有比赛,但仅返回给定用户的结果。
我相信您的查询会过滤掉results
,而用户以外的其他人已提交结果。这是因为该行匹配,因此r.user_id
不是NULL
。但是,用户ID与您要查找的用户ID不匹配。