2012-11-22 103 views
0

我有一個搜索jsp,它有多個搜索數據庫的條件(ID或NAME或DATE或...)。我需要一個選擇查詢來滿足所有條件。我已經部分編寫了選擇查詢,但效果不佳。請幫我完成查詢Oracle select查詢條件

select * from table 1 
    where Id in (select id from table 1 where (those three conditions here) 

    i have (1=? or id=?) 
     and (1=? or name=?) 
     and (1=? or date =?) 

但它返回完整的表。我知道這三個條件是正確的。如何修改它以獲得結果。我不想要任何存儲過程,因爲我是一個新手

回答

0

你有一個多餘的子查詢。

我假設第一個參數是1,如果第二個參數是空的,那麼0如果第二個參數不是null;同樣,如果第四個參數爲空,則第三個參數將爲1;如果第四個參數不爲空,則爲0等。

試試這個:

select * from table 
where (1=? or id=?) 
    and (1=? or name=?) 
    and (1=? or date =?) 

例如,如果用戶按名稱搜索,我期望的參數是這樣的(1,NULL,0,'SMITH',1,NULL)

(此外,您不能使用1對錶的別名)。

+0

謝謝@Jeff。這就是我一直在尋找的! – ahairshi

1

如果您的條件對於每一行都是正確的,您將獲得完整的表格。

例如,如果您的變量是1,1 = 1將爲true,並且每行都會返回。


p,s,我不明白你爲什麼嵌套選擇。

+0


我得到了你的觀點。我需要獲取完整的數據,如果id名稱和日期的所有值都爲空,否則我需要獲取給定條件的數據。 如何修改條件以符合要求?我獨自一人嘗試用身份證發送價值。它總是返回完整的表格,因爲它返回True,表示條件。 是的,我總是發送1. – ahairshi

+0

外部查詢涉及多個表。 Id是外鍵。內部查詢是獲取所有的ID。 – ahairshi

0
select * from table 1 
    where Id in (select 
     (case 
       when (1=? or id=?) and (1=? or name=?) and (1=? or date =?) then id 
      end) as id from table 1) 

我希望這是你在找什麼