我想把这两张桌子放在一起:
订单
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
答案 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