Mysql 在联接查询中将列设置为null或空
订单表 产品表 使用SELECT*FROM order o LEFT在o.order\u id=p.order\u id上连接产品p 结果Mysql 在联接查询中将列设置为null或空,mysql,join,left-join,Mysql,Join,Left Join,订单表 产品表 使用SELECT*FROM order o LEFT在o.order\u id=p.order\u id上连接产品p 结果 PRODUCT ID | ORDER ID|ORDER_DT 1 | 1 |12-12-2016 2 | 1 |12-12-2016 3 | 1 |12-12-2016 但是我需要有这样的结果,注意到我仍然有相同数量的行,但是表列被清空的顺序是重复的 PROD
PRODUCT ID | ORDER ID|ORDER_DT
1 | 1 |12-12-2016
2 | 1 |12-12-2016
3 | 1 |12-12-2016
但是我需要有这样的结果,注意到我仍然有相同数量的行,但是表列被清空的顺序是重复的
PRODUCT ID | ORDER ID|ORDER_DT
1 | 1 |12-12-2016
2 | |
3 | |
您可以使用临时变量执行此操作,例如:
SELECT product_id, orders.order_id, order_dt, IF(@previous = orders.order_id, 0, orders.order_id) AS oid, @previous:= orders.order_id
FROM orders
LEFT JOIN products
ON orders.order_id = products.order_id,
(SELECT @previous := -1) a;
并将其包装到另一个SELECT查询中以获取所需的列,例如:
SELECT r.product_id, IF(r.oid = 0, '', r.oid) AS order_id, r.order_dt
FROM (
SELECT product_id, orders.order_id, order_dt, IF(@previous = orders.order_id, 0, orders.order_id) AS oid, @previous:= orders.order_id
FROM orders
LEFT JOIN products
ON orders.order_id = products.order_id,
(SELECT @previous := -1) a
) r;
以下是.这更像是在表示层而不是在数据库中进行的显示操作。在join子句中缺少ON条件,因此得到的是笛卡尔积。或者,如果数据库中有多个订单,您也会这样做!抱歉更新了问题@LordPeter
SELECT product_id, orders.order_id, order_dt, IF(@previous = orders.order_id, 0, orders.order_id) AS oid, @previous:= orders.order_id
FROM orders
LEFT JOIN products
ON orders.order_id = products.order_id,
(SELECT @previous := -1) a;
SELECT r.product_id, IF(r.oid = 0, '', r.oid) AS order_id, r.order_dt
FROM (
SELECT product_id, orders.order_id, order_dt, IF(@previous = orders.order_id, 0, orders.order_id) AS oid, @previous:= orders.order_id
FROM orders
LEFT JOIN products
ON orders.order_id = products.order_id,
(SELECT @previous := -1) a
) r;