Объединение двух таблиц вместе, где все столбцы не совпадают

Я пытаюсь соединить эти две таблицы:

заказы

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 
Другие вопросы по тегам