:データが異なる場合は2行、同じ場合は1行が返されます。どうして?次の文撮影
select count(1) as cnt from tbl where val= 1
union
select count(1) as cnt from tbl where val = 0
2つの選択は、結果はその値を持つ単一の行で同じ値を返す場合。選択が異なる値を返す場合、結果は2つの値を持つ2つの行になります。どうして?私が使用した行の合計数を見つけようとしています
:
数が異なる場合は期待通りに動作しますが、数が同じであれば半分の値を与えるselect sum (cnt) from
(
select count(1) as cnt from tbl where value = 1
union
select count(1) as cnt from tbl where value = 0
) as tbl2
...
(PS:SQLがソリューションよりもこのように動作する理由にもっと興味がある)
@Mherdadなぜ彼らはそれをそういうものにしましたか? – systemovich
@Geoffrey、 'select count'の場合、それは奇妙に見えますが、' 'firstname、lastname from persons''の場合、各人物を一度返すのが理にかなっています。 –
@Geoffrey:私はSQLを設計した時点では存在しませんでしたが、推測することができます。リレーショナルの計算は集合理論に基づいており、SQLは基本的にリレーショナルの計算クエリを表現するための構文です。基本的には、 'union'は' intersect'に相当し、どちらも理論的操作に設定されています。デザイナーはそれらをそのままにして、その目的のために別のクエリー演算子、 'union all'を導入することが理にかなっていました。 –