SQL喜欢与多个语句

时间:2018-08-27 09:34:31

标签: sql sql-server tsql

因此,我有以下查询未返回正确的结果,也不知道为什么:

样本数据:

LIST1 | LIST2
APRIL | NOLA
NOLA  | BEBB
NOLA  | APROLS
APRA  | BLIN

查询:

SELECT LIST1, 
       LIST2, 
       CASE WHEN (([LIST1] LIKE '%APR%' 
                   OR [LIST1] LIKE '%NOLA%') 
             AND ([LIST2] NOT LIKE '%APR%' 
                   AND [LIST2] NOT LIKE '%NOLA%')) 
            THEN 1 
            ELSE 0 
       END AS RESULTS

两行都返回1。它应该为第一行返回0。所以我期望以下输出

LIST1 | LIST2 | RESULTS
APRIL | NOLA  | 0
NOLA  | BEBB  | 1
NOLA  | APROLS| 0
APRA  | BLIN  | 1

我这里的错误是什么?正如我在“ AND”语句中明确指出的那样,对于这两种情况,输出应该为0。

1 个答案:

答案 0 :(得分:1)

[LIST1] LIKE '%APR%' OR [LIST1] LIKE '%NOLA%'

它为您提供了两种情况1,因为and这行对于list1的第一行值'APRIL'是正确的 对于第二行,'NOLA'同样适用,并且当满足条件的任何部分为true或满足条件时,则完全条件为true。结果,您遇到了两种情况

但是如果您设置了SELECT LIST1, LIST2, CASE WHEN ( ( [LIST1] LIKE '%APR%' OR [LIST1] LIKE '%NOLA%') AND ( [LIST2] NOT LIKE '%APR%' AND [LIST2] NOT LIKE '%NOLA%') ) THEN 1 ELSE 0 END AS RESULTS from t 条件,那么结果将符合您的期望

LIST1   LIST2   RESULTS
APRIL   NOLA    0
NOLA    BEBB    1
NOLA    APROLS  0
APRA    BLIN    1

http://sqlfiddle.com/#!18/9f8c5/1

class User(AbstractUser):
    pass

AUTH_USER_MODEL = 'account.user'