SQL CASE WHEN(1 = 1)1 = 1在做什么?

时间:2019-01-10 20:36:26

标签: mysql sql

我有一条我没有写的SQL语句,我正在努力解决它。

CASE
    WHEN (1 = 1) THEN A.AMT
    WHEN (A.ACC_NO = '1') THEN A.AMT - 100000000
    WHEN (A.ACC_NO = '2') THEN A.AMT - 100000000
    WHEN (A.ACC_NO = '3') THEN A.AMT - 100000000
    WHEN (A.ACC_NO = '4') THEN A.AMT - 100000000
    WHEN (A.ACC_NO = '5') THEN A.AMT - 100000000
    WHEN (A.ACC_NO = '6') THEN A.AMT - 100000000
    ELSE A.FACE_AMT
END AS TRUE_AMT,    

有人可以解释一下(1 = 1)在做什么吗?

通过在线研究,我的解释是1 = 1表示始终为真,那么这意味着case语句将始终返回amt字段?

但是这似乎没有意义,因为这意味着没有其他条件可以满足?

2 个答案:

答案 0 :(得分:2)

它始终是占位符(通常用于调试/测试):

CASE
    WHEN (1 = 1) THEN A.AMT
    WHEN (A.ACC_NO = '1') THEN A.AMT - 100000000
    WHEN (A.ACC_NO = '2') THEN A.AMT - 100000000
    WHEN (A.ACC_NO = '3') THEN A.AMT - 100000000
    WHEN (A.ACC_NO = '4') THEN A.AMT - 100000000
    WHEN (A.ACC_NO = '5') THEN A.AMT - 100000000
    WHEN (A.ACC_NO = '6') THEN A.AMT - 100000000
    ELSE A.FACE_AMT
END AS TRUE_AMT,  


-- entire case is the same as:
A.AMT AS TRUE_AMT

答案 1 :(得分:2)

您将不得不询问编写代码的人。正如您正确指出的那样,该代码阻止了以后的条件生效。

我可能会推测有人正在编写代码,而您在开发过程中正在查看快照。或者,他们从完整的case表达式中更改了它,并希望在删除更详细的表达式之前测试代码。