结果为空的join表

piah890a  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(355)

这个问题在这里已经有答案了

mysql右表中带条件的左连接(2个答案)
两年前关门了。
我有两张table: users 以及 tasksusers :

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

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 |
+----------+-------------------+-------------------+

我想我需要一个左连接和合并的组合,但我从来没有用过它们,我的结果是空的或我的语法是错误的。
我试了很多东西,都想不清楚了,哈哈,我的问题现在是这样的:

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

那么最好的方法是什么呢?
57hvy0tb

57hvy0tb1#

你就快到了。这应该可以做到:

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

问题是你需要过滤 calenderweekWHERE 条款。因此,任何没有任务的用户都将被排除在结果之外。如果你把条件放在 JOIN ,则选择“所有用户”和“所有没有任务的用户” no tasks .

相关问题