2017-10-17 81 views
0

我想更新一列,以便它不是0或null,并且它支持任何值> 0。我已经提出这种方式,但它不起作用。我还没有很好地处理SQL,我没有看到任何明确的例子。更新两个条件或更多的列SQL

UPDATE TEST_MFE_AGRUP_PASARELA 
SET POLIGON = 0 
WHERE POLIGON > 0 AND POLIGON != 0; 

这是正确的方法吗?

谢谢你们!

+0

这必须是WHERE POLIGON> 0或POLIGON!= 0;' –

+1

如果你使用'WHERE POLIGON> 0',你不会包含'POLIGON = 0 ',那么你可以删除约束'POLIGON!= 0' – Cenderze

+0

这可以通过WHERE poligon> 0来简化(很明显,> 0不是= 0) – fattidare

回答

0

您可以使用以下方法:

UPDATE TEST_MFE_AGRUP_PASARELA SET POLIGON = 0 WHERE NVL(POLIGON, 0) > 0; 
+0

哇,非常感谢你 – Bufank85

+0

你不需要NVL。 –

2

你不需要检查空值。因为NULL > 0返回false。

问题是NULL <> 0也是错误的,所以没有行更新。

所以,你只需要:

WHERE POLIGON > 0 

入住这SQL DEMO

with tab(country, car, price) as ( 
    select 'Germany' ,'Mercedes', 30000 from dual union all 
    select 'Germany' ,'MERCEDES', 30000 from dual union all 
    select 'Germany' ,'BMW'  , 20000 from dual union all 
    select 'Germany' ,'Opel' , 15000 from dual union all 
    select 'Japan' ,'Honda' , 20000 from dual union all 
    select 'Japan' ,'Toyota' , NULL from dual 
) 
select country, car, price 
from tab 
WHERE price > 15000 
+1

我会说'NULL> 0'的计算结果为'UNKNOWN',它不是'TRUE',行被'WHERE'条件省略。 – lad2025

+0

@ lad2025你是对的,但效果是一样的没有? –

+0

是的,效果将是一样的。我只是想指出。当您在视图中使用这种类型的语法与“CHECK”约束或“WITH CHECK OPTION”时,这可能会引起误解。有趣的事情可能发生:) – lad2025

0

我可能会误解你。
据我所知,如果该字段为0(零)或空(空),您要为字段Poligon赋值。如果是这种情况,你的where语句应该是WHERE POLIGON=0 or POLIGON IS NULL

+0

'POLIGON!= 0'应该等同于'POLIGON IS NOT NULL' –