以下SQL是更新零件状态,条件如下
1:如果零件有效期过期。
2:有新的零件价格(用到了exists
)。
UPDATE T_SWCAS_DB_PART a
SET IS_ENABLE = '0'
WHERE
PRICE_VAILD_TO <
DATE_FORMAT(NOW(), '%Y%m%d')
AND IS_ENABLE = '1'
AND EXISTS (
SELECT
1
FROM
t_swcas_db_part
WHERE
MATERIAL = a.MATERIAL
AND VENDOR = a.VENDOR
AND IS_ENABLE = 1
AND PRICE_VAILD_FROM > a.PRICE_VAILD_FROM
)
可是,这个Sql执行失败了。
[Err] 1093 - You can’t specify target table ‘a’ for update in FROM clause
我们再试一下换成查询,是可以的。。
先不管原因吧,快速解决问题 ,那么就sql修改如下:
解决问题。记录下。
UPDATE t_swcas_db_part
SET IS_ENABLE = '0'
WHERE
id IN (
SELECT
a.id
FROM
(
SELECT
id
FROM
t_swcas_db_part a
WHERE
PRICE_VAILD_TO < DATE_FORMAT(NOW(), '%Y%m%d')
AND IS_ENABLE = '1'
AND EXISTS (
SELECT
1
FROM
t_swcas_db_part
WHERE
MATERIAL = a.MATERIAL
AND VENDOR = a.VENDOR
AND IS_ENABLE = 1
AND PRICE_VAILD_FROM > a.PRICE_VAILD_FROM
)
) a
)
**ps:**这个SQL在oracle与sql server都是能执行的。但到了mysql就不行。。记录下。