0

union allを使用していくつかのクエリを統合していますが、unionallはそれらのゼロ値に空の行を挿入していません。私はサイトを調べました、そしてこの質問によると、それはそれらを含むべきです:

NULLフィールドを持つmysqlユニオン

これらは私の質問です:

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

4つの独立したクエリ:

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

つまり、基本的に前の質問の答えは正しいと思うので、私は何を間違っているのでしょうか。

ありがとうございました!

4

2 に答える 2

2

どの列がnullですか?where句が原因でnullが削除されていませんか?nullを使用した操作は、常にnullになることに注意してください(IS NULLを使用したテストを除く)。

于 2012-09-20T09:49:03.287 に答える
0

3 番目のクエリは 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
于 2012-09-20T11:12:08.207 に答える