将两个表合并在一起,其中所有列都不匹配

时间:2016-12-13 14:15:54

标签: mysql

我想把这两张桌子放在一起:

订单

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

Orders中的positionId列引用位置中的id。我知道要把这两个放在一起我需要一个关于外键值的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 个答案:

答案 0 :(得分: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 
相关问题