sql = "SELECT DISTINCT(p.*), concat(u.first_name,' ',u.last_name) as fullname, concat('@',u.username) as username, cover.file_path, cover.file_type, avatar.avatar_path
FROM products p
JOIN stores s ON s.id = p.store_id
JOIN users u ON u.id = s.user_id
LEFT OUTER JOIN (SELECT fh.product_id AS cp_id,
coalesce(fh.file_path, 'default image path') AS file_path,
fh.file_type AS file_type FROM file_handlers fh WHERE is_cover = true) cover ON p.id = cover.cp_id
LEFT OUTER JOIN (SELECT fh.id AS av_id, fh.file_path AS avatar_path FROM file_handlers fh WHERE is_cover = false) avatar ON u.avatar_id = avatar.av_id"
Выше мой сырая SQL-запрос для моей базы данных PostgreSQL. Моя проблема заключается в том, что я хочу отобразить default_file_file, если он имеет значение null в базе данных. Я попробовал три способа для этого:COALESCE (FIELD, "DEFAULT VALUE") не работает для PostgreSQL + рельсов
1. COALESCE(fh.file_path, 'default image') AS file_path,
2. COALESCE(NULLIF(fh.file_path, ''), 'default image') AS file_path,
3. CASE WHEN fh.file_path IS NULL THEN 'default image' ELSE fh.file_path END AS file_path,
Нет Luck !, ни один из них не работает для меня, и я не знаю, почему. Что мне здесь не хватает?
[Примечание: см this screenshot]
Действительно ценят за любую помощь.
Благодаря
Ваш первый пример COALESCE верен, вы пытались выполнить запрос непосредственно в базе данных? Что он возвращает? – ninesided
Спасибо за ваш ответ, я дам вам попробовать в базе данных напрямую и дам вам знать .. – przbadu
Он возвращает значение null для файла_папки в базе данных postgres также – przbadu