这个问题在这里已经有答案了:
mysql右表中带条件的左连接(2个答案)
两年前关门了。
我有两张table: users
以及 tasks
表 users
:
+----------+---------------------+
| 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'
那么最好的方法是什么呢?
1条答案
按热度按时间qni6mghb1#
你就快到了。这应该可以做到:
问题是你需要过滤
calenderweek
在WHERE
条款。因此,任何没有任务的用户都将被排除在结果之外。如果你把条件放在JOIN
,则选择“所有用户”和“所有没有任务的用户”no tasks
.