Firebird数据库OR运算符嵌套条件查询的正确语法求助
Firebird 嵌套条件查询正确写法
你的筛选逻辑本身没有问题,语法报错通常是Firebird特有的标识符大小写规则导致的,以下是符合规范的写法:
SELECT * FROM "PREORDER" WHERE MOST_RECENT = 'Y' AND ( COLLECTED = 'N' OR (COLLECTED = 'Y' AND CUSTOMER_NUMBER <> 0) );
如果创建表时字段是大小写敏感模式(建表时字段加了双引号定义),需要给所有字段也加上双引号匹配大小写:
SELECT * FROM "PREORDER" WHERE "MOST_RECENT" = 'Y' AND ( "COLLECTED" = 'N' OR ("COLLECTED" = 'Y' AND "CUSTOMER_NUMBER" <> 0) );
补充说明
- 写法上把公共条件
MOST_RECENT = 'Y'提前,可读性更高,逻辑和你原来的写法完全等价 - 如果
CUSTOMER_NUMBER允许为空,且你需要把空值也归为不等于0的情况,可以将对应条件修改为CUSTOMER_NUMBER <> 0 OR CUSTOMER_NUMBER IS NULL
内容的提问来源于stack exchange,提问作者Michael Pietzsch
相关产品推荐
相关产品推荐

