修数据时需特别注意,如果sql语句中存在 or 连接条件,一定要加小括号,重中之重。
1、如下没加小括号:
SELECT
*
FROM
e_storage_cost_batch
WHERE
batch_number IN (
SELECT
e1.batch_number
FROM
e_storage_cost_batch e1
JOIN e_storage_cost_batch_init e2 ON e1.warehouse_id = e2.warehouse_id
WHERE
e1.batch_type = 'shipment' or e1.batch_type = 'adjustment'
AND e1.create_time < e2.create_time
);
查询出来的数据有1038条,并且还有与条件中 batch_type 中值,不一致的情况,如下图:
2、加了小括号之后,如下:
SELECT
*
FROM
e_storage_cost_batch
WHERE
batch_number IN (
SELECT
e1.batch_number
FROM
e_storage_cost_batch e1
JOIN e_storage_cost_batch_init e2 ON e1.warehouse_id = e2.warehouse_id
WHERE
( e1.batch_type = 'shipment' or e1.batch_type = 'adjustment' )
AND e1.create_time < e2.create_time
);
没有任何记录,如下图:
总结:
只要sql语句中存在 ‘or’ ,一定要检查是否需要加小括号;