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"
위는 내 postgresql 데이터베이스에 대한 원시 원시 sql 쿼리입니다. 내 문제는 데이터베이스에서 null 인 경우 기본 file_path를 표시하려고합니다. 나는 이것을 위해 세 가지 방법을 시도했다 :postgresql + 레일에 대해 COALESCE (FIELD, "DEFAULT VALUE")가 작동하지 않습니다.
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,
No !, 아무도 나에게 효과가 없으며 나는 그 이유를 모른다. 내가 여기서 무엇을 놓치고 있니?
[참고 : this screenshot 참조하시기 바랍니다]
정말 어떤 도움을 주셔서 감사합니다. 때문에 왼쪽
감사
첫 번째 COALESCE 예가 정확합니다. 데이터베이스에서 직접 쿼리를 실행 해 보았습니까? 그것은 무엇을 반환합니까? – ninesided
답장을 보내 주셔서 감사합니다. 데이터베이스에서 직접 시도해보고 알려 드리겠습니다. – przbadu
postgres 데이터베이스의 file_path에 null 값이 반환됩니다. – przbadu