0

我们有两张表:

  • 比赛
  • 结果

我们需要显示比赛 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)

我该怎么做才能解决我的问题?

4

1 回答 1

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。

于 2013-07-04T17:35:50.087 回答