【问题标题】:join table with empty results [duplicate]加入空结果的表[重复]
【发布时间】:2018-12-22 13:58:01
【问题描述】:

我有两张桌子:userstasks

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 应该是这样的:

calenderweek(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'

那么最好的方法是什么?

【问题讨论】:

  • 您在COALESCE(tasks.task, 'no tasks') 中使用no tasks,但您的数据显示为no task,无论如何都已发布。
  • 最好的办法是处理应用代码中数据显示的问题
  • 下次请显示您编写的代码正确完成了某些部分以及使用它的代码不起作用。 minimal reproducible example

标签: mysql join coalesce


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢!你帮了我很多,现在我明白了:) 不知道谁对你投了反对票,但你是我今天的英雄!谢谢!!
猜你喜欢
  • 2016-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
  • 2023-03-28
相关资源
最近更新 更多