2011-01-27 19 views
1

我有以下結構的SQL語句的數目:在SQL中,「不同的」降低的結果行的從一到零

select distinct ... 
from table1, 
(select from table2, table3, table4 where ...) 
where ... 
order by ... 

隨着在where子句一定值,則語句返回零行結果集。當我刪除'distinct'關鍵字時,它會返回一行。我希望在這兩種情況下都能看到單個結果行。是否存在我不知道的導致此行爲的「獨特」關鍵字的某些屬性?

該數據庫是Oracle 11g。

+0

你有這個選擇的DDL和DML嗎? – 2011-01-27 10:36:44

+0

難道你不能建立一個我們可以嘗試自己的例子嗎? – 2011-01-27 10:37:25

+0

添加DISTINCT刪除重複項並只返回唯一的行:所以這似乎不可能使用distinct會給你零結果集並將其刪除給出一個。 – ayush 2011-01-27 10:39:38

回答

1

原來,其中一個子選擇導致了一個數據集,其中包含一列,其中每列都是NULL。似乎這一行以非明顯的方式影響了DISTINCT的評估(至少對我而言)。也許這是由於一些底層的SQL優化。在我刪除了這個NULL填充行的原因後,問題就消失了,語句在結果中計算結果應該是一行。

4

你所描述的不是DISTINCT的預期行爲。這是:

SQL> select * from dual 
    2/

D 
- 
X 

1 row selected. 

SQL> select distinct * from dual 
    2/

D 
- 
X 

1 row selected. 

SQL> 

所以,如果你說的是真的發生了什麼,那麼這是一個錯誤。但是,您也會說這是一種罕見的情況,這意味着您的數據和/或環境中的瞬態情況有一定的特殊性,而不是bug。

您需要創建一個可重現的測試用例,原因有兩個。部分地,沒有人能夠調查你的問題。但主要是因爲構建測試用例本身就是一項調查:嘗試隔離數據和/或環境因素的精確組合往往會產生洞察力,從而產生解決方案。