有没有办法从表连接中返回带有空/空数据的不同值。最好用下面的例子来解释。
表“订单”
order_id | order_total
1 | 10
2 | 20
3 | 50
表“order_items”
item_id | order_id | name | qty_ordered | base_price | row_total
1 | 1 | Product | 1 | 10 | 10
2 | 2 | Product | 1 | 10 | 10
3 | 2 | Product2 | 1 | 10 | 10
4 | 3 | Product | 2 | 10 | 20
5 | 3 | Product2 | 3 | 10 | 30
我正在尝试生成一个看起来像这样的结果集。
order_id | item_id | name | qty_ordered | base_price | row_total | order_total
1 | 1 | Product | 1 | 10 | 10 | 10
2 | 2 | Product | 1 | 10 | 10 | 20
null | 3 | Product2 | 1 | 10 | 10 | null
3 | 4 | Product | 2 | 10 | 20 | 50
null | 5 | Product2 | 3 | 10 | 30 | null
每个订单我只需要order_id和order_total一次。我认为通过某种连接/不同/子查询可以实现这一点,但到目前为止我没有尝试过任何工作。
答案 0 :(得分:1)
使用:
SELECT x.order_id,
x.item_id,
x.name,
x.qty_ordered,
x.base_price,
x.row_total,
x.order_total
FROM (SELECT CASE
WHEN @order = o.order_id THEN NULL
ELSE o.order_id
END AS order_id,
oi.item_id,
oi.name,
oi.qty_ordered,
oi.base_price,
oi.row_total,
o.order_total,
CASE
WHEN @order = o.order_id THEN NULL
ELSE o.order_total
END AS order_total,
@order := o.order_id
FROM ORDER_ITEMS oi
JOIN ORDERS o ON o.order_id = oi.order_id
JOIN (SELECT @order := -1) r
ORDER BY o.order_id, oi.item_id) x
答案 1 :(得分:0)
SELECT * FROM order_items
LEFT JOIN orders
ON (
order_items.order_id=orders.order_id
AND
order_items.item_id=(
SELECT MIN(item_id)
FROM order_items a
WHERE a.order_id=order_items.order_id
)
)
这应该有效,因为嵌套查询总是为每个订单返回相同的MIN(item_id),并且它只加入该项目。
但这是一个非常非常丑陋的sql片段。不要这样做。