因此,我有以下查询未返回正确的结果,也不知道为什么:
样本数据:
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。
答案 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'