Просто добавьте COALESCE :
SELECT `tblSettings`.`id`, `tblSettings`.`setting_name`,
COALESCE(`tblAgencySettings`.`setting_value`, `tblSettings`.`setting_value`)
FROM `tblSettings` LEFT JOIN `tblAgencySettings`
ON `tblSettings`.`id` = `tblAgencySettings`.`setting_id`
AND `tblAgencySettings`.`agency_id` = '1'
WHERE `tblSettings`.`changeable` = '1'
Функция COALESCE возвращает первое ненулевое значение, которое вы ей даете, так:
COALESCE(`tblAgencySettings`.`setting_value`, `tblSettings`.`setting_value`)
Будет tblAgencySettings.setting_value
, если это не NULL, и tblSettings.setting_value
, если tblAgencySettings.setting_value
равно NULL.
Если tblAgencySettings.setting_value
также может быть нулем, и вы хотите игнорировать это, а также NULL, тогда вы можете использовать это вместо COALESCE выше:
COALESCE(
IF(`tblAgencySettings`.`setting_value` = 0, NULL, `tblAgencySettings`.`setting_value`),
`tblSettings`.`setting_value`
)
IF
возвращает второй аргумент, если первый является истиной, и третий, если первый аргумент является ложным, поэтому приведенное выше использование преобразует ноль в NULL. Или вы можете пойти до CASE оператора:
case
when `tblAgencySettings`.`setting_value` = 0 then `tblSettings`.`setting_value`
when `tblAgencySettings`.`setting_value` IS NULL then `tblSettings`.`setting_value`
else `tblSettings`.`setting_value`
end