Объединение двух таблиц вместе, где все столбцы не совпадают
Я пытаюсь соединить эти две таблицы:
заказы
id positionID Quantity
1 1 1
2 1 1
3 2 2
4 3 1
позиции
id month year position available max
1 1 2017 Header 0 2
2 1 2017 Footer 0 2
3 2 2017 Header 1 2
4 2 2017 Footer 2 2
Столбец positionId в Orders указывает идентификатор в позициях. Я знаю, что для того, чтобы собрать их вместе, мне нужно оператор JOIN ON для значения внешнего ключа, никаких проблем там нет. Но я также хотел бы включить строки непосредственно из таблицы позиций. Это где я потерян. Основная цель этого состоит в том, чтобы получить позиции, где ордер не был создан (как последняя строка в примере вывода).
Результат, который я ищу, таков:
orderID month year position quantity available max
1 1 2017 Header 1 0 2
2 1 2017 Header 1 0 2
1 2017 Header 0 2
3 2 2017 Footer 2 0 2
2 2017 Footer 0 2
4 2 2017 Header 1 1 2
2 2017 Header 1 2
2 2017 Footer 2 2
1 ответ
Решение
Следующий запрос доставляет запрошенный вывод:
SELECT NULL AS orderId, `month`, `year`, position, NULL AS quantity,
available, `max`, id
FROM Positions
UNION ALL
SELECT o.id AS orderId, p.`month`, p.`year`, p.position, o.quantity,
p.available, p.`max`, p.id AS id
FROM Orders o
INNER JOIN Positions p on o.positionId = p.id
ORDER BY id, CASE WHEN orderId IS NULL THEN 1 ELSE 0 END, position