OR的postgres语法问题?

时间:2010-05-30 14:48:15

标签: postgresql where

下面的第一个有效,但是,只是想看看是否有更好的方法......

如果我试图找到所有以'C'开头并且标志为2或状态为9的记录,我是否需要两次合并'C'标准?

即,

"SELECT * FROM mytable WHERE name like 'C%' AND flag = 2 OR name like 'C%' AND status = 9"

或者,是否有更快捷的方式来编写它以便我只需要设置一次“C%”?

2 个答案:

答案 0 :(得分:1)

从逻辑上讲,ANDOR是相互分配的,即

a & (b | c) = (a & b) | (a & c)

这意味着您的条件可以重写为

name LIKE 'C%' AND (flag = 2 OR status = 9)

答案 1 :(得分:1)

OR的优先级低于AND,所以你需要括号。

WHERE name LIKE“C%”AND(flag = 2 OR flag = 9)

您还可以检查一组值的成员身份

... AND标志IN(1,9)