次のクエリでは、いくつかのテーブルを結合します。これらのテーブルの1つはprofile_img
です。このテーブルには、アップロードしたユーザーのプロフィール画像が格納されています。それ以外の場合はprofile_images/default.jpg
と表示され、ユーザーはprofile_img
テーブルには含まれていないため、そのテーブルにないかどうかを確認して、イメージをデフォルトとして使用します。SQLクエリでelseを使用する
ここは私の質問です。
SELECT f.*, u.*, p.*
FROM friends f
LEFT JOIN
profile_img p
ON p.user_id = f.friend_one
JOIN
users u
ON u.id = f.friend_one
WHERE f.friend_two = ? AND f.status = ? AND
p.id = (select max(p2.id) from profile_img p2 where p2.user_id = p.user_id)
は、私が試してみて結果を得るために,coalesce(p.img, 'profile_images/default.jpg') as img
を試してみましたが、それは助けにはなりませんでした。別のクエリで
:
(case when p.img <> '' then p.img
else 'profile_images/default.jpg'
end) as img
私はちょうどそれがこのケースで動作するように、それはこのために動作しません取得する方法がわからないです。
ありがとう。これはトリックでした。どうしてあなたがなぜ働いているのか教えてください。推論は何ですか? – Paul
ifallは、coalesceのように、テスト対象のフィールドがnullの場合に別の値を返します。この場合、p.image_urlフィールドはイメージを持たないユーザーのためにnullなので、代わりに 'default.png'を返します。機能的には次のようになります:p.image_urlがnullの場合、 'default.png' else p.image_url end as profile_pic – serverSentinel