2014-03-26 123 views
2

我有一點問題。我想執行一個查詢: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') 

並且我給出的第一種方法並不是最好的。你有什麼想法如何改善查詢? 非常感謝!

+1

通過「空」,你的意思是列值將爲NULL或空字符串? – David

+0

似乎在第一行缺少'tetxt3'後面的''。並且在tetxt1和tetxt2之後的最後2行再次出現,coalese或NVL可以幫助您。 – xQbert

+0

在oracle中,一個空字符串將被自動轉換爲NULL,我認爲(那在MS SQL Server中不一樣)。是的,在我的情況下它是NULL。 – rean24

回答

0

你會不會得到相同的效果有:

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

不,那不會是一樣的。 – David

+0

是的,不一樣。感謝您的幫助! – rean24

0

假設「空」是指NULL可以使用COASLESCE關鍵字。

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

噢,非常感謝你!我會嘗試! – rean24

+0

非常感謝你。你認爲我們會在where子句中使用函數來解決parfomance問題嗎? – rean24

+0

沒有。你不應該有任何問題,至少不是根據我的經驗。你可以總是和這個一起運行你的原始查詢,並且每次都要執行這個查詢。 – David