私はマージしたいSQLクエリを2つ持っていますが、残念ながらMYSQLの知識のあるユーザーではありません。今、このためにUNIONクエリで余分な列が返されない
は私のクエリです:
SELECT animal.species, count(animal.species) as f
FROM disp, animaldesc, animal
WHERE disp.disp_id = animaldesc.disp_id
AND animaldesc.authored = 1
AND animaldesc.animal_id = animal.id
GROUP BY animal.species
union
SELECT animal.species, count(animal.species) as f_specific
FROM disp, animaldesc, animal
WHERE disp.disp_id = animaldesc.disp_id
AND animaldesc.authored = 1
AND animaldesc.animal_id = animal.id
AND disp.language = "en_gb"
GROUP BY animal.species
ORDER BY f DESC
このクエリは、このようなデータを返している:私は私が望むすべてのデータを取得
-----------------------|--------------------
species | f
-----------------------|--------------------
M_A_1789 | 5
-----------------------|--------------------
M_A_1789 | 1
-----------------------|--------------------
M_A_1731 | 5
-----------------------|--------------------
M_A_1731 | 1
Allthough、構造が間違っています。私はJOINをする代わりにUNIONを使うことと関係していると思います。私はしかし、使用するJOINのタイプ(私は右外側を推測している)について確信しています。なぜなら、f_specificはfよりも少ない行を返すことができるからです。
UNIONメソッド以外の2つのクエリを組み合わせる明確な説明が見つかりませんでしたか? JOINキーワードを使用すると、クエリは次のように返されます。
-----------------------|------------|---------------
species | f | f_specific
-----------------------|------------|---------------
M_A_1789 | 5 | 1
-----------------------|------------|---------------
M_A_1731 | 5 | 1
-----------------------|------------|---------------
お勧めします。
IF(disp.language = "en_gb"、1,0)にIF(disp.language = "en_gb")、1、0を置き換えます。 – Leran2002
はい、このクエリが機能しました。 IF文に問題がありましたが、それを 'SUM 'に置き換えました(disp.language =" en_gb "、次に1 else 0 end)AS f_specific'ありがとう! –
ああ、「IF」の閉じ括弧が間違っていました。私は今それを修正した。 – axiac