2012-09-20 58 views
0

我使用union all來聯合多個查詢,但union all沒有爲這些零值插入空行。我參加了現場一看,並根據這個問題,它應該包括他們:SQL union全部不包含零值

mysql union with NULL fields

這是我的查詢:

select [SMTH] from [H].[D].[T] 
where Date = (SELECT MAX(DATE) from [H].[D].[T] where Data = 1 and SMTH > 0) 
union all 
select [SMTH] from [H].[D].[T] 
where Date = (SELECT MAX(DATE) from [H].[D].[T] where Data = 2 and SMTH > 0) 
union all 
select [SMTH] from [H].[D].[T] 
where Date = (SELECT MAX(DATE) from [H].[D].[T] where Data = 3 and SMTH > 0) 
union all 
select [SMTH] from [H].[D].[T] 
where Date = (SELECT MAX(DATE) from [H].[D].[T] where Data = 4 and SMTH > 0) 

結果:

10068 
3967 
895 

四個獨立查詢:

select [SMTH] from [H].[D].[T] 
where Date = (SELECT MAX(DATE) from [H].[D].[T] where Data = 1 and SMTH > 0) 

select [SMTH] from [H].[D].[T] 
where Date = (SELECT MAX(DATE) from [H].[D].[T] where Data = 2 and SMTH > 0) 

select [SMTH] from [H].[D].[T] 
where Date = (SELECT MAX(DATE) from [H].[D].[T] where Data = 3 and SMTH > 0) 

select [SMTH] from [H].[D].[T] 
where Date = (SELECT MAX(DATE) from [H].[D].[T] where Data = 4 and SMTH > 0) 

結果:

10068 
3967 
0 
895 

所以基本上,因爲我認爲,從以前的問題的答案是正確的,我在做什麼錯?

謝謝!

+1

你確定這是MySQL的?使用'[]'作爲標識符是Sql Server的典型代表。 –

+0

這是SQL,但以前回答的問題是MySQL – Eduardo

+0

1.表中的Date值是否唯一? 2.您是如何/在哪裏獲得四個獨立查詢的結果?難道第三個查詢實際上沒有生成行,並且返回結果的應用程序只是默認顯示「0」? –

回答

2

哪一列爲空? 您確定,由於您的where子句,空值不會被刪除嗎? 請記住,使用null的操作總是導致null(除了使用IS NULL進行測試)。

+0

我改變了列,愚蠢地我錯誤的零零我問我。謝謝。 – Eduardo

0

第三個查詢返回0.爲什麼你認爲這是null?無論如何這個查詢比union清潔:

如果表中有一個主鍵(id在查詢):

select SMTH, Data, [date] 
from 
    H.D.T 
    inner join (
     select id, Data, max([date]) as [date] 
     from H.D.T 
     where Data in (1, 2, 3, 4) and SMTH > 0 
     group by id, Data 
    ) s on s.id = H.D.T.id 
order by Data 
+0

是的,我的錯誤是用null表示0值。我解決了這個問題。 「我使用union all來統一幾個查詢,但union all沒有爲這些零值插入空行」 – Eduardo

+1

該查詢不工作:列「HDTdata」在ORDER BY HDTSMTH子句中無效,因爲它沒有包含在聚合函數或GROUP BY子句 – Eduardo

+0

@Eduardo更正 –