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

标签 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.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/

相关文章:

mysql - PHP 查询不起作用

javascript - 即时创建下拉菜单

php - 如何加载 codeigniter-base-model 中的所有行?休息API

java - 如何从 sqlite 中检索列并将其存储到数组中?

php - mysql left join耗时太长

mysql - MySQL 中的多个内部连接?

java - Logback DBAppender 的 caller_filename 为空

mysql - 如何让 mySQL 字段只接受 a-zA-Z 而不是更广泛的字符范围?

sql - 提取日期和时间 - (Teradata)

sql - 查找数据库中引用某个主键的所有外键约束