修数据时需特别注意,如果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 中值,不一致的情况,如下图:
Snipaste_2021-05-10_22-57-36.png

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
	); 

没有任何记录,如下图:
Snipaste_2021-05-10_23-00-56.png

总结:

只要sql语句中存在 ‘or’ ,一定要检查是否需要加小括号;

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐