#mysql
#mysql
Вопрос:
Я пытаюсь присоединиться к другой таблице, но не смог заставить ее работать. SQLFiddle здесь
таблица :
CREATE TABLE service_order
(id int,
id_default_support_worker int,
id_custom_support_worker int);
INSERT INTO service_order
values(1, 1, null), (2,1, null),(3,1, null),(4,4, 2);
CREATE TABLE support_worker
(id int,
name VARCHAR(20));
INSERT INTO support_worker
values(1, 'support_worker 1'), (2,'support_worker 2'),(3,'support_worker 3'),(4,'support_worker 4');
CREATE TABLE result_service_order
(id int,
id_service_order int,
descr VARCHAR(10))
;
INSERT INTO result_service_order
values(1, 1, 'desc 1'), (2, 1,'desc 2'),(3, 1,'desc 3'),(4, 4,'desc 4');;
То, что я пытаюсь сделать, это присоединиться к service_order.id_custom_support_worker, только если service_order.id_custom_support_worker не равен нулю.
SELECT RSO.descr , SW.name
FROM result_service_order RSO
LEFT JOIN service_order SO ON RSO.id_service_order = SO.id
INNER JOIN support_worker SW ON SW.id = SO.id_default_support_worker --here
В настоящее время я настраиваю whit COALESCE как sugested в другом tred, но не смог заставить его работать.
Есть ли кто-нибудь, кто может помочь мне выполнить это соединение, если результат равен NULL??
Комментарии:
1. Странно иметь внутреннее соединение после внешнего соединения в вашем случае. Я полагаю, что вы всегда получаете один и тот же результат, если используете исключительно внутренние соединения.
Ответ №1:
Это возвращает custom_support_worker, если задано, default_support_worker в противном случае:
INNER JOIN support_worker SW
ON ( SW.id = COALESCE( SO.id_custom_support_worker, SO.id_default_support_worker ) )
Ответ №2:
насколько я понял, вы хотите выполнить третье соединение, если значение custom_support_worker не равно null, поэтому я предлагаю изменить третье условие соединения на INNER JOIN support_worker SW ON SW.id = SO.id_custom_support_worker
это.
SELECT RSO.descr , SW.name FROM result_service_order RSO LEFT JOIN service_order SO ON RSO.id_service_order = SO.id INNER JOIN support_worker SW ON SW.id = SO.id_custom_support_worker;