Oracle改进了查询where子句

时间:2014-03-26 18:45:08

标签: sql oracle

我有点问题。我想执行该查询:

WHERE (column1 = 'tetxt1'  and column2 = 'tetxt2' and column3 = 'tetxt3 ) 
OR (column2 = 'tetxt2' and column3 = 'tetxt3' ) 
OR (column1 = 'tetxt1' and column3 = 'tetxt3' ) 
OR (column1 = 'tetxt1' and column2 = 'tetxt2' ) 
OR ( column3 = 'tetxt3' ) 
OR ( column1 = 'tetxt1 ) 
OR ( column2 = 'tetxt2 )

换句话说,where子句列之一可以为空,但我需要使用和查询具有值的列。所以,如果我只有column1和column2的值而不是column3的值,那么将使用和条件查询这两个值。我认为这不会起作用:

Where (column1 = 'tetxt1'  or column2 = 'tetxt2' or column3 = 'tetxt3')

我给出的第一种方法并不是最好的方法。你有什么想法如何改善查询? 非常感谢你!

2 个答案:

答案 0 :(得分:0)

你不会得到同样的效果:

WHERE 
column1 IN('tetxt1','tetxt2','tetxt3')
or column2 IN('tetxt1','tetxt2','tetxt3')
or column3 IN('tetxt1','tetxt2','tetxt3')

答案 1 :(得分:0)

假设"空"表示NULL您可以使用COASLESCE关键字。

WHERE (COALESCE(column1, 'text1') = 'tetxt1'  and COALESCE(column2, 'text2')  = 'tetxt2' and COALESCE(column3, 'text3')  = 'tetxt3 )