2016-08-30 40 views
0

我有一個輸出數據如下所示使用過濾0或空值在兩個列

查詢:select * from table 1

表1

name a b 
pen 0 50 
paper 10 0 
bike 0 0 
candy 0 0 
disk 20 30 

輸出應該是

name a b 
pen 0 50 
paper 10 0 
disk 20 30 

應該消除a = 0和b = 0的記錄

如果我使用的過濾條件爲

select * 
from table1 
where a!=0 and b!=0 

然後我只得到disk

+1

'其中(A,B)<>((0,0))' –

回答

3

你想

WHERE a != 0 OR b != 0 -- get records with at least one of [a, b] 

如果你碰巧在他們將被排除這些列NULL值就像0會(因爲NULL != 0評估爲false)。

+0

能否通過'null'使用過濾'或不是NULL'。示例'select * from receipts where delivery_date is NOT NULL;' – Justplayit94

+3

@ Justplayit94不要過於複雜的事情。如果'a'爲'NULL','a!= 0'不會評估爲真。 – hvd

+2

@Thilo你的回答指出它不適用於NULL值,但這是不對的,它會處理它們很好。您可以刪除該通知。 – hvd

0

試試這個:

SELECT 
    * 
FROM 
    table1 
WHERE 
    NOT (coalesce(a, 0) = 0 AND coalesce(b, 0) = 0) 
0

你只得到disk與where子句的原因是AND你使用。 AND意味着兩個條件必須爲真,所以0 列B必須不爲0。

只有當滿足此條件時,一個結果示列中的絕不能。在您的示例中,只有disk數據集符合條件。

爲了實現你想要使用OR來代替。

爲了過濾NULL值可以檢查IS NULL這樣的:

WHERE (a <> 0 AND a IS NOT NULL) OR (b <> 0 AND b IS NOT NULL)