У меня есть три таблицы table1, table2 и table2.table1.parent_id - это идентификатор записи в table2 или table3, в зависимости от значения table1.parent_type.Теперь я хочу объединить table1 с table2 и table3, в зависимости от значения table1.parent_type.
Это можно сделать с помощью UNION.Но есть ли другой метод?
Это мой текущий запрос
(SELECT c.*, a.title
FROM table1 c
LEFT OUTER JOIN table2 a
ON c.parent_id = a.id
WHERE c.parent_type = 0)
UNION (SELECT c.*, p.title
FROM table1 c
LEFT OUTER JOIN table3 p
ON c.parent_id = p.id
WHERE c.parent_type = 1)
ORDER BY id DESC
LIMIT 10
Обновление : Это другой метод (из ответа Dark Falcon)
SELECT c.*, IF(c.parent_type = 0, a.title, p.title) as title FROM table1 c
LEFT OUTER JOIN table2 a ON c.parent_id = a.id AND c.parent_type = 0
LEFT OUTER JOIN table3 p ON c.parent_id = p.id AND c.parent_type = 1
WHERE a.id IS NOT NULL OR p.id IS NOT NULL ORDER BY id DESC LIMIT 10;
Обновление 2 : я профилировал запросы с помощью профилировщика запросов.Соединение с несколькими таблицами более чем в 100 раз быстрее для всех моих тестовых прогонов.