#mysql #sql
Вопрос:
У меня есть часть sql — запроса
left outer join
(
select `id`,
`order_payment_id`,
`product_id`,
`product_slug_id`,
`order_package_id`,
`name`,
`price`
from `web`.`order_products` `$Table`
) `$Inner` on (`$Outer`.`id2` = `$Inner`.`order_payment_id`)
Но проблема в том, что если
$Outer`.`id2` is NULL
тогда мне нужно слияние, как
`$Inner` on (`$Outer`.`order_payment_id` = `$Inner`.`order_payment_id`)
Итак, как написать правильный синтаксис для условия внутри ON ?
ожидаемый результат
left outer join
(
select `id`,
`order_payment_id`,
`product_id`,
`product_slug_id`,
`order_package_id`,
`name`,
`price`
from `web`.`order_products` `$Table`
) `$Inner` on ((IF ISNULL(`$Outer`.`id2`) THEN `$Outer`.`order_payment_id` ELSE `$Outer`.`id2`) = `$Inner`.`order_payment_id`)
Комментарии:
1. проверьте функцию IFNULL для mysql
Ответ №1:
Я бы выбрал функцию COALESCE, которая возвращает первое ненулевое значение:
) `$Inner` on COALESCE(`$Outer`.`id2`, `$Outer`.`order_payment_id`) = `$Inner`.`order_payment_id`)
Ответ №2:
Сделай этот трюк
) `$Inner` on (IFNULL(`$Outer`.`order_payment_id2`,`$Outer`.`id2`) = `$Inner`.`order_payment_id`)