加入 table 结果为空

join table with empty results

我有两个 table:userstasks

table users:

+----------+---------------------+
|    id    |      usrname        |
+----------+---------------------+
|    1     | user1               |
+----------+---------------------+
|    2     | user2               |
+----------+---------------------+
|    3     | user3               |
+----------+---------------------+
|    4     | user4               |
+----------+---------------------+

table tasks

+----------+-------------------+-------------------+-------------------+
|    id    |      users        |      task         |   calenderweek    |
+----------+-------------------+-------------------+-------------------+
|    1     | user1             | task1             | 48                |
+----------+-------------------+-------------------+-------------------+
|    2     | user1             | task2             | 49                |
+----------+-------------------+-------------------+-------------------+
|    3     | user2             | task1             | 50                |
+----------+-------------------+-------------------+-------------------+
|    4     | user1             | task3             | 50                |
+----------+-------------------+-------------------+-------------------+

现在我想显示所有用户及其给定日历周的任务,即使没有给定日历周的条目。

outout 应该是这样的:

日历周 (50) 的输出:

+----------+-------------------+-------------------+
|    id    |      users        |      task         |
+----------+-------------------+-------------------+
|    1     | user1             | task3             |
+----------+-------------------+-------------------+
|    2     | user2             | task1             |
+----------+-------------------+-------------------+
|    3     | user3             | no task           |
+----------+-------------------+-------------------+
|    4     | user4             | no task           |
+----------+-------------------+-------------------+

我想我需要 Left join 和 COALESCE 的组合,但我从未使用过它们,我的结果是空的或者我的语法错误。

我尝试了很多东西,我已经想不清楚了哈哈 我的查询目前看起来像这样:

SELECT  *, COALESCE(tasks.task, 'no tasks') FROM users LEFT JOIN tasks ON users.usrname = tasks.users WHERE tasks.calenderweek = '50'

那么最好的方法是什么?

你快到了。 This 应该可以解决问题:

SELECT  *, COALESCE(tasks.task, 'no tasks') FROM users LEFT JOIN tasks ON users.usrname = tasks.users AND tasks.calenderweek = '50'

问题是您在 WHERE 子句中过滤了 calenderweek。因此,任何没有任务的用户都会被排除在结果之外。如果您将条件放在 JOIN 中,您会 select 所有用户,所有没有任务的用户都会获得 no tasks.