使用Oracle 11g

时间:2018-11-06 08:22:17

标签: vb.net oracle select multiple-columns where-clause

我有一张桌子,我正在尝试在多个条件下运行查询

select POLICY_REFER,
       END_REFER,
       CLIENT_NAME,
       POLICY_PRODUCT,
       ISSUE_DATE,
       GROSS,
       DOC_TYPE,
       DOC_STATUS
from   POLICY_MASTER
  1. 发布日期:DFrom和:DTo

  2. DOC_STATUS ='已停放'

这两个条件必须匹配

  1. CLIENT_NAME =:客户端或CLIENT_NAME为空

  2. POLICY_PRODUCT =:产品或POLICY_PRODUCT为空

这两个取决于我从中选择的组合框

select POLICY_REFER,
       END_REFER,
       CLIENT_NAME,
       POLICY_PRODUCT,
       ISSUE_DATE,
       GROSS,
       DOC_TYPE,
       DOC_STATUS
from   POLICY_MASTER
where  ISSUE_DATE BETWEEN :DFrom AND :DTo
and    CLIENT_NAME = :Client or CLIENT_NAME is null
and    POLICY_PRODUCT = :Product or POLICY_PRODUCT is null
and    DOC_STATUS = 'Parked'".... 

此查询可以接受POLICY_PRODUCT为空,但不能与CLIENT_NAME一起使用为空...

2 个答案:

答案 0 :(得分:1)

我怀疑问题是您缺少or条件周围的方括号,例如我认为您的查询应遵循以下原则:

select POLICY_REFER,
       END_REFER,
       CLIENT_NAME,
       POLICY_PRODUCT,
       ISSUE_DATE,
       GROSS,
       DOC_TYPE,
       DOC_STATUS
from   POLICY_MASTER
where  ISSUE_DATE BETWEEN :DFrom AND :DTo
and    (CLIENT_NAME = :client or :client is null)
and    (POLICY_PRODUCT = :product or :product is null)
and    DOC_STATUS = 'Parked'".... 

答案 1 :(得分:0)

  

查询似乎工作正常。我认为问题出在   CLIENT_NAME列的属性,请检查是否   该列,因为有些属性不允许null   查询中的值

select POLICY_REFER,
       END_REFER,
       CLIENT_NAME,
       POLICY_PRODUCT,
       ISSUE_DATE,
       GROSS,
       DOC_TYPE,
       DOC_STATUS
from   POLICY_MASTER
where  (ISSUE_DATE BETWEEN :DFrom AND :DTo)
and    (CLIENT_NAME = :Client or CLIENT_NAME is null)
and    (POLICY_PRODUCT = :Product or POLICY_PRODUCT is null)
and    DOC_STATUS = 'Parked'"