我需要修改以下代码以删除值为1xxxxxxxx和3xxxxxxxx(所以,100000001,100000002等)的所有内容,但我对SQL的了解并不完美。有没有人可以帮我修改这个脚本?
SET @increment_id = '100000001';
SELECT *
FROM `sales_flat_quote_address_item`
WHERE `sales_flat_quote_address_item`.`quote_address_id` IN (
SELECT `address_id`
FROM `sales_flat_quote_address`
WHERE `sales_flat_quote_address`.`quote_id` IN (
SELECT `entity_id`
FROM `sales_flat_quote`
WHERE `sales_flat_quote`.`reserved_order_id` = @increment_id
)
);
DELETE
FROM `sales_flat_quote_shipping_rate`
WHERE `sales_flat_quote_shipping_rate`.`address_id` IN (
SELECT `address_id`
FROM `sales_flat_quote_address`
WHERE `sales_flat_quote_address`.`quote_id` IN (
SELECT `entity_id`
FROM `sales_flat_quote`
WHERE `sales_flat_quote`.`reserved_order_id` = @increment_id
)
);
DELETE
FROM `sales_flat_quote_address`
WHERE `sales_flat_quote_address`.`quote_id` IN (
SELECT `entity_id`
FROM `sales_flat_quote`
WHERE `sales_flat_quote`.`reserved_order_id` = @increment_id
);
DELETE FROM `sales_flat_quote_item_option`
WHERE `sales_flat_quote_item_option`.`item_id` IN (
SELECT `item_id`
FROM `sales_flat_quote_item`
WHERE `sales_flat_quote_item`.`quote_id` IN (
SELECT `entity_id`
FROM `sales_flat_quote`
WHERE `sales_flat_quote`.`reserved_order_id` = @increment_id
)
);
DELETE FROM `sales_flat_quote_item`
WHERE `sales_flat_quote_item`.`quote_id` IN (
SELECT `entity_id`
FROM `sales_flat_quote`
WHERE `sales_flat_quote`.`reserved_order_id` = @increment_id
);
DELETE FROM `sales_flat_quote_payment`
WHERE `sales_flat_quote_payment`.`quote_id` IN (
SELECT `entity_id`
FROM `sales_flat_quote`
WHERE `sales_flat_quote`.`reserved_order_id` = @increment_id
);
DELETE FROM `sales_flat_quote`
WHERE `sales_flat_quote`.`reserved_order_id` = @increment_id;
DELETE FROM `sales_order_datetime`
WHERE `sales_order_datetime`.`entity_id` IN (
SELECT `entity_id`
FROM `sales_order`
WHERE `sales_order`.`increment_id` = @increment_id
);
DELETE FROM `sales_order_decimal`
WHERE `sales_order_decimal`.`entity_id` IN (
SELECT `entity_id`
FROM `sales_order`
WHERE `sales_order`.`increment_id` = @increment_id
);
DELETE FROM `sales_order_int`
WHERE `sales_order_int`.`entity_id` IN (
SELECT `entity_id`
FROM `sales_order`
WHERE `sales_order`.`increment_id` = @increment_id
);
DELETE FROM `sales_order_text`
WHERE `sales_order_text`.`entity_id` IN (
SELECT `entity_id`
FROM `sales_order`
WHERE `sales_order`.`increment_id` = @increment_id
);
DELETE FROM `sales_order_varchar`
WHERE `sales_order_varchar`.`entity_id` IN (
SELECT `entity_id`
FROM `sales_order`
WHERE `sales_order`.`increment_id` = @increment_id
);
DELETE FROM `sales_order_entity_datetime`
WHERE `sales_order_entity_datetime`.`entity_id` IN (
SELECT `entity_id`
FROM `sales_order_entity`
WHERE `sales_order_entity`.`increment_id` = @increment_id
);
DELETE FROM `sales_order_entity_decimal`
WHERE `sales_order_entity_decimal`.`entity_id` IN (
SELECT `entity_id`
FROM `sales_order_entity`
WHERE `sales_order_entity`.`increment_id` = @increment_id
);
DELETE FROM `sales_order_entity_int`
WHERE `sales_order_entity_int`.`entity_id` IN (
SELECT `entity_id`
FROM `sales_order_entity`
WHERE `sales_order_entity`.`increment_id` = @increment_id
);
DELETE FROM `sales_order_entity_text`
WHERE `sales_order_entity_text`.`entity_id` IN (
SELECT `entity_id`
FROM `sales_order_entity`
WHERE `sales_order_entity`.`increment_id` = @increment_id
);
DELETE FROM `sales_order_entity_varchar`
WHERE `sales_order_entity_varchar`.`entity_id` IN (
SELECT `entity_id`
FROM `sales_order_entity`
WHERE `sales_order_entity`.`increment_id` = @increment_id
);
DELETE FROM `sales_order_entity`
WHERE `sales_order_entity`.`increment_id` = @increment_id;
DELETE FROM `sales_order`
WHERE `sales_order`.`increment_id` = @increment_id;
答案 0 :(得分:0)
更改
WHERE `sales_flat_quote`.`reserved_order_id` = @increment_id
到
WHERE `sales_flat_quote`.`reserved_order_id` BETWEEN 100000000 AND 199999999
WAIT!标题为100000000-199999999
,但问题是1xxxxxxxx and 3xxxxxxxx
,所以如果是后者则将其更改为:
WHERE `sales_flat_quote`.`reserved_order_id` BETWEEN 100000000 AND 399999999
或者,您可以选择使用REGEXP
运算符:
WHERE `sales_flat_quote`.`reserved_order_id` REGEXP '^[123][[:digit:]]{8}'
答案 1 :(得分:0)
通常情况下,我建议这样做。但如果性能不是问题,您可以使用:
...
WHERE LEFT(`sales_order`.`increment_id`, 1) = 1
AND RIGHT(`sales_order`.`increment_id`, 8) BETWEEN 0 and 99999999
和
...
WHERE LEFT(`sales_flat_quote`.`reserved_order_id`, 1) = 1
AND RIGHT(`sales_flat_quote`.`reserved_order_id`, 8) BETWEEN 0 and 99999999
这假设字段长度为9个字符。它会将最左边的值与1
匹配,并检查右边的范围。
也许您可能还想在出现问题时使用交易?
答案 2 :(得分:0)
您可以使用以下脚本删除所有以1或3开头的记录:
DELETE
FROM 'sales_flat_quote_address_item'
WHERE
'sales_flat_quote_address_item'.'quote_address_id' like '1%'
OR
'sales_flat_quote_address_item'.'quote_address_id' like '3%';