簡體   English   中英

使用Oracle 11g的選擇查詢中的多個條件

[英]Multiple conditions in select query using Oracle 11g

我有一張表,我正在嘗試在多個條件下運行查詢

select POLICY_REFER,
       END_REFER,
       CLIENT_NAME,
       POLICY_PRODUCT,
       ISSUE_DATE,
       GROSS,
       DOC_TYPE,
       DOC_STATUS
from   POLICY_MASTER
  1. ISSUE_DATE日期:D發自AND:D發至

  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一起使用為空...

我懷疑問題是您缺少您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'".... 

查詢似乎工作正常。 我認為問題出在列CLIENT_NAME的屬性,請檢查列的屬性是否存在,因為有些屬性不允許查詢中使用空值

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'"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM