使用 Select 查询根据条件更改两个表的值

Using a Select query to change the Value for two tables depending on a condition

目标:我想创建一个 Select 查询,其中结果包含两个表中的所有记录,但时间段除外。除此之外,我希望有一个条件,如果停车分钟数为 0 或 Null,则该字段的值应设置为 -1。

进展:在目前的状态下,我合并了两个表,可以将0值设置为-1。由于我是 SQL 的新手,我找不到将原始值保留几分钟并集成 'When Null Then -1' 子句的解决方案。许多解决方案建议使用 Update query ,但操作需要在 Select 结果中。 MYSQL 2017. 这是我到目前为止的代码:

Select c.ID, c.status, c.Date, Case When c.Minutes = 0 Then -1 End as Minutes
From Customer_1 as c
Union
Select c1.ID, c1.status, c1.Date, Case When c1.Minutes = 0 Then -1 End as
Minutes
From Customer_2 as c1 

原始数据集:我有两个列名完全相同的表,代表用户 ID

Customer_1:

ID| Date| Minutes| Time| status
1 | 2019| 3      | 2019| A
2 | 2019| 0      | 2019| A

Customer_2:

ID| Date| Minutes| Time| status
3 | 2019| Null   | 2019| A
4 | 2019| 0      | 2019| A

最终查询应该是这样的:

ID| Date| Minutes| status
1 | 2019| 3      | A
2 | 2019| -1     | A
3 | 2019| -1     | A
4 | 2019| -1     | A

任何关于如何构建满足条件的工作查询的建议都将不胜感激!

只需使用 Coalesce() 函数并在 Case .. When 语句中添加 Else 部分即可:

Select ID, status, Date, Case When Coalesce(Minutes,0) = 0 Then -1 Else Minutes End as Minutes
  From Customer_1 
 Union
Select ID, status, Date, Case When Coalesce(Minutes,0) = 0 Then -1 Else Minutes End
  From Customer_2

并且在这种情况下对表使用别名是多余的,因为除了 Union 之外的查询是独立的。第二个查询的别名(Minutes)也是多余的。

另一种选择可能是使用 IF 语句和 COALESCE() 函数:

Select ID, status, Date, IF(Coalesce(Minutes,0) , Minutes, -1) as Minutes
  From Customer_1 
 Union
Select ID, status, Date, IF(Coalesce(Minutes,0) , Minutes, -1)
  From Customer_2 

Demo