如果值存在则如何获取数据否则返回默认值

时间:2019-02-09 14:20:55

标签: mysql sql

我从数据库中获得了这两个数据,唯一的区别是它们的状态

id   |   userId    |  status   |  dateCreated
1    |     1       |  pending  |   2019-02-09 22:11:11
2    |     1       |  complete |   2019-02-10 10:40:20

我想做的是,如果状态complete根据ID存在,则获取状态为complete的数据,否则,如果状态pending不存在,则获取状态complete

我尝试使用SELECT CASE语句,但是发生的是它同时返回了待处理状态和完整状态

我之所以不只是更新第一个数据是出于报告目的。

有没有办法做到这一点? 这是我的示例查询。

SELECT userId,
CASE
    WHEN status = 'completed' THEN "completed"
    ELSE "pending"
END AS status
FROM tbltransaction where userId = '1'

3 个答案:

答案 0 :(得分:0)

聚合返回每个用户一行:

SELECT userId,
       (CASE WHEN SUM(status = 'completed') > 0 THEN 'completed'
             ELSE 'pending'
        END) AS status
FROM tbltransaction 
WHERE userId = 1
GROUP BY userId;

或者,如果您只关心一个用户,则可以使用:

SELECT 1 as userId,
       (CASE WHEN EXISTS (SELECT 1
                          FROM tbltransaction t
                          WHERE t.userId = 1 AND
                                t.status = 'completed'
                         )
             THEN 'completed'
             ELSE 'pending'
         END)

答案 1 :(得分:0)

具有EXISTS:

SELECT userId,
  CASE
    WHEN EXISTS (SELECT 1 FROM tbltransaction WHERE userId = '1' AND status = 'completed') THEN 'completed'
    ELSE 'pending'
  END AS status
FROM tbltransaction where userId = '1'

答案 2 :(得分:0)

我可能是错的,但是从您的描述来看,您似乎想要给定userId的最新状态。我还假设this.validateForm.get('Name').patchValue(this.studentModel.Name); 是“自动增量”列。如果是这样,那么您可以尝试一下

id

在上述假设下,这将返回所有用户的最新状态。

希望这会有所帮助!干杯!