SQL CASE WHEN (1 = 1) Что делает 1 = 1? - PullRequest
0 голосов
/ 10 января 2019

У меня есть оператор 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 означает всегда true, так что это будет означать, что оператор case будет всегда возвращать поле amt?

Однако это, кажется, не имеет смысла, поскольку это означало бы, что ни одно из других условий никогда не будет выполнено?

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Вы должны спросить человека, который написал код. Как вы правильно заметили, код препятствует вступлению в силу более поздних условий.

Я могу предположить, что кто-то пишет код, а вы смотрите на снимок во время разработки. Или они изменили его с полного выражения case и хотят проверить код перед удалением более подробных выражений.

0 голосов
/ 10 января 2019

Это заполнитель для всегда true (типичное использование для отладки / тестирования):

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...