2014-06-25 35 views
0

我正在使用postgresql 9.1並希望從表中選擇一些記錄。 詳情如下: 表名:將被選擇MUSER 字段:用戶ID,mailid,PHONENUMBER選擇查詢檢查任一條件或條件

我已經查詢等中使用:

SELECT userid, mailid, phonenumber FROM muser WHERE phonenumber = ? OR mailid = ? 

,它應該滿足以下條件:

  1. 當兩者都存在時顯示記錄
  2. 只顯示只有mailid存在的記錄
  3. 僅當存在電話號碼時才顯示記錄。

重要的是用戶ID是唯一的。所以結果應該是單個記錄。我已經在我的wso2esb工具中使用過濾器,並且在過濾器中使用上述條件進行過濾時,在前兩種情況下查詢工作正常,但在最後一種情況下,它顯示table.is中可用的所有userid,但查詢不正確?或者我有用戶的另一條款代替或子句中查詢

+2

能否請您提供的樣本數據和預期的輸出? – Uriil

+0

「現在」是指你是否在記錄中存在或作爲輸入參數存在?換句話說:表中的'phonenumber'和'mailid'字段是否爲NULL?他們可以作爲參數是空的嗎?正如Uriil所說:請向我們展示樣品數據和預期產出! –

+0

沒有..他們不是空的..我在查詢中採取phno和mailid示例,並試圖檢查其中一個或兩個是否可用在表中或不是? – user3129056

回答

1

null作爲缺席參數的值

select userid, mailid, phonenumber 
from muser 
where 
    (phonenumber = ? or ? is null) 
    and 
    (mailid = ? or ? is null) 
+0

:thanks for reply.Please檢查下面的鏈接..我有更多的細節更新我的問題http://stackoverflow.com/questions/24422963/select-query-to-check-both-or-either-or-condition – user3129056

0

的事實userid是獨一無二的,並不意味着郵件ID和手機數字是唯一的。如果兩個用戶具有相同的phonenumber(這可能發生在公司中),則在搜索此電話號碼時,您將獲得兩個用戶。記住這一點。

我假設要麼給出這兩個參數,要麼只是其中一個丟失。在最後一種情況下,通過缺失參數NULL

允許使用的參數$1的郵件ID和$2的電話號碼

SELECT 
    userid, mailid, phonenumber 
FROM 
    muser 
WHERE 
    ($1 IS NULL OR $1 IS NOT NULL AND mailid = $1) AND 
    ($2 IS NULL OR $2 IS NOT NULL AND phonenumber = $2)