我在sql中有where条件:
WHERE
( Spectrum.access.dim_member.centene_ind = 0 )
AND
(
Spectrum.access.Client_List_Groups.Group_Name IN ( 'Centene Health Plan Book of Business' )
AND
Spectrum.access.dim_member.referral_route IN ( 'Claims Data' )
AND
***(
Spectrum.access.fact_task_metrics.task = 'Conduct IHA'
AND
Spectrum.access.fact_task_metrics.created_by_name <> 'BMU, BMU'
AND
Spectrum.access.fact_task_metrics.created_date BETWEEN '01/01/2015 00:0:0' AND '06/30/2015 00:0:0'
)***
AND
***(
Spectrum.access.fact_outreach_metrics.outreach_type IN ( 'Conduct IHA' )
AND
(
Spectrum.dbo.ufnTruncDate(Spectrum.access.fact_outreach_metrics.metric_date) >= Spectrum.access.fact_task_metrics.metric_date
OR
Spectrum.access.fact_outreach_metrics.metric_date >= Spectrum.access.fact_task_metrics.created_date
)
)***
AND
Spectrum.access.fact_outreach_metrics.episode_seq = 1
AND
Spectrum.access.dim_member.reinstated_date Is Null
)
我在上面的代码中标记了两个条件。
第一个条件有2个AND运算符。
第二个条件有AND和OR运算符。
问题1:删除外括号“(”在第一个条件中会影响结果吗?
问题2:删除外括号“(”在第二个条件下会影响结果吗?
取下外支架后,滤镜将如下所示:
Spectrum.access.dim_member.referral_route IN ( 'Claims Data' )
AND
Spectrum.access.fact_task_metrics.task = 'Conduct IHA'
AND
Spectrum.access.fact_task_metrics.created_by_name <> 'BMU, BMU'
AND
Spectrum.access.fact_task_metrics.created_date BETWEEN '01/01/2015 00:0:0' AND '06/30/2015 00:0:0'
AND
Spectrum.access.fact_outreach_metrics.outreach_type IN ( 'Conduct IHA' )
AND
(
Spectrum.dbo.ufnTruncDate(Spectrum.access.fact_outreach_metrics.metric_date) >= Spectrum.access.fact_task_metrics.metric_date
OR
Spectrum.access.fact_outreach_metrics.metric_date >= Spectrum.access.fact_task_metrics.created_date
)
AND
Spectrum.access.fact_outreach_metrics.episode_seq = 1
感谢您的帮助。
此致 犹大书
答案 0 :(得分:2)
当在括号集内计算这些表达式时,操作顺序规定在OR之前处理AND。
WHERE (A AND B) OR (C AND D)
相当于:
WHERE A AND B OR C AND D
但是下面的例子:
WHERE (A OR B) AND (C OR D)
不等于:
WHERE A OR B AND C OR D
真正成为:
WHERE A OR (B AND C) OR D
答案 1 :(得分:1)
从技术上讲,您应该能够安全地删除两个示例中的有问题的括号。使用AND语句,您将所有条件添加到一起就成为一个大条件。使用OR子句时,应仔细放置括号,以便正确分割组。
考虑以下例子:
a) where y = 1 AND n = 2 AND x = 3 or x = 5
b) where y = 1 AND n = 2 AND (x = 3 or x = 5)
c) where (y = 1 AND n = 2 AND x = 3) or x = 5
在示例A中,预期结果尚不清楚。
在例B中,预期结果表明必须满足所有条件,X可以是3或5。
在示例C中,预期结果表明Y = 1,N = 2且X = 3 OR x = 5。只要X = 5,Y和N相等就无关紧要。