2017-10-09 9 views
1

MySQLクエリ(バージョン5.6.37)に問題があります。私はそれが単にクエリコンポーネントの再編成を必要とすると思うが、私はそれを動作させることはできない。空のMySQL連結結合がクエリの失敗を引き起こす

問題:私のJOINが行を返さないとき、データがクエリと一致しても、クエリ全体が行を返しません。ここで

は私の現在のクエリである(ここで、 '@' が入力される):

id | pet 
1 | cat 
2 | dog 
3 | fish 
4 | snake 
5 | rabbit 

そして、JOINした "petData" の表のように:

SELECT pets.id,pet,collar,GROUP_CONCAT(petData.fleas) AS f_id 
FROM titles 
    JOIN petWear ON pets.id = petWear 
    JOIN petData ON petWear.id = petData.id 
WHERE pets.id = '@' 
GROUP BY pets.id,pet,collar 

は、このような "ペット" のテーブルを想定すると、この:

id | fleas 
1 | 1 
1 | 2 
1 | 3 
1 | 4 
2 | 5 

成功したクエリ: @ = 1、その後、クエリは単一の結果を返す場合:

id | pet | collar | f_id 
1 | cat | gold | 1,2,3,4 

失敗クエリ: は@ = 5場合は、クエリが結果を返しません。私はpetWearテーブルが含まれている

id | pet | collar | f_id 
5 | rabbit | red | 

注:私は戻ってきたいと思い何

(@ =のためには、5)(「F_ID」のすなわち結果なし、またはNULL、)この単一の結果であります「通常の」結合もまた画像の一部である必要があると述べるために、「襟」のリストを使用します。

+1

LEFT OUTER JOIN petData'を試しましたか? –

+1

また、何をしようとしているのかを明確に説明してくれてありがとう! –

+0

ありがとう、BillとJovi。私は毎日SQLを使用せず、別のJOIN *タイプを指している*私は15年間で読んだことのないマニュアルの一部を再読み込みしました! 'JOIN petData'を' LEFT JOIN petData'に変更することは私が必要としていたものでした。ご協力いただきありがとうございます。 – Parapluie

答えて

0

次のコードを試してください。基本的に、GROUP_CONCATが値を返さない場合は、no_fleasを出力します。

SELECT pets.id,pet,collar,IFNULL((GROUP_CONCAT(petData.fleas), 'no_fleas') AS f_id 
FROM titles 
JOIN petWear ON pets.id = petWear 
JOIN petData ON petWear.id = petData.id 
WHERE pets.id = '@' 
GROUP BY pets.id,pet,collar 
+0

ありがとう、サミ。私はこのようなものを探していた。残念ながら、MySQL v.5.6.37では動作しませんでした。 LEFT JOINを採用するには上記の推奨を使用しました。 – Parapluie