sql:如何正确地用这么多AND构成where子句
以下内容将忽略日期范围。有人能解释一下这里出了什么问题吗?不确定某些语句是否需要在其周围加括号,但无论如何也不明白为什么sql:如何正确地用这么多AND构成where子句,sql,Sql,以下内容将忽略日期范围。有人能解释一下这里出了什么问题吗?不确定某些语句是否需要在其周围加括号,但无论如何也不明白为什么 WHERE booking_date BETWEEN '2011-11-01' AND '2011-12-21' AND booking_status = 'Confirmed' OR booking_status = 'Cancelled' OR booking_status = 'Rearranged' AND invoice_number='' O
WHERE
booking_date BETWEEN '2011-11-01' AND '2011-12-21'
AND booking_status = 'Confirmed'
OR booking_status = 'Cancelled'
OR booking_status = 'Rearranged'
AND invoice_number=''
ORDER BY booking_date ASC
这可能是您想要的:
WHERE booking_date BETWEEN '2011-11-01' AND '2011-12-21'
AND (booking_status = 'Confirmed' OR booking_status = 'Cancelled' OR booking_status = 'Rearranged')
AND invoice_number=''
ORDER BY booking_date ASC"
添加的换行符只是为了便于阅读。重要的部分是括号
查看本页以了解运算符优先级的解释:在
或
条件周围加括号:
WHERE
booking_date BETWEEN '2011-11-01' AND '2011-12-21'
AND (booking_status = 'Confirmed'
OR booking_status = 'Cancelled'
OR booking_status = 'Rearranged')
AND invoice_number=''
ORDER BY booking_date ASC
您也可以在中使用,这可能更容易阅读和理解:
WHERE
booking_date BETWEEN '2011-11-01' AND '2011-12-21'
AND booking_status IN ('Confirmed', 'Cancelled', 'Rearranged')
AND invoice_number=''
ORDER BY booking_date ASC
并且具有高于或。您的代码被解释为:
WHERE (booking_date BETWEEN '2011-11-01' AND '2011-12-21'
AND booking_status = 'Confirmed')
OR (booking_status = 'Cancelled')
OR (booking_status = 'Rearranged' AND invoice_number='')
我建议不要使用OR,而是在中使用:
WHERE booking_date BETWEEN '2011-11-01' AND '2011-12-21'
AND booking_status IN ('Confirmed', 'Cancelled', 'Rearranged')
AND invoice_number=''
可能是您的或给您带来了问题:
要重新格式化:
WHERE booking_date BETWEEN '2011-11-01' AND '2011-12-21'
AND (booking_status = 'Confirmed'
OR booking_status = 'Cancelled'
OR booking_status = 'Rearranged')
AND invoice_number=''
ORDER BY booking_date ASC
您可以添加括号以使其执行所需操作(如上所述),或者甚至可以在
子句中使用:
WHERE booking_date BETWEEN '2011-11-01' AND '2011-12-21'
AND booking_status IN ( 'Confirmed', 'Cancelled', 'Rearranged')
AND invoice_number=''
ORDER BY booking_date ASC
+1绝对,在这种情况下,In运算符是最有效的。