结果为空的join表

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

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

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

  1. +----------+---------------------+
  2. | id | usrname |
  3. +----------+---------------------+
  4. | 1 | user1 |
  5. +----------+---------------------+
  6. | 2 | user2 |
  7. +----------+---------------------+
  8. | 3 | user3 |
  9. +----------+---------------------+
  10. | 4 | user4 |
  11. +----------+---------------------+

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

  1. 现在,我想显示所有用户与他们的任务为给定的日历周,即使没有输入为给定日历周。
  2. outout应该是这样的:
  3. 日历周产量(50):

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

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

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

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

57hvy0tb1#

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

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

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

相关问题