加入 table 结果为空
join table with empty results
我有两个 table:users
和 tasks
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
.
我有两个 table:users
和 tasks
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
.