Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在联接查询中将列设置为null或空_Mysql_Join_Left Join - Fatal编程技术网

Mysql 在联接查询中将列设置为null或空

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

订单表

产品表

使用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
但是我需要有这样的结果,注意到我仍然有相同数量的行,但是表列被清空的顺序是重复的

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;