[英]MySQL update fields based on value in another field
我需要根據另一個字段中字符串的存在來更新一個字段。 我需要對數百個搜索字符串執行此操作。 到目前為止,這是我所擁有的:
SET SQL_SAFE_UPDATES=0;
UPDATE business_table
SET `chain` = '7-Eleven'
WHERE business_name LIKE BINARY '%7-Eleven%' OR business_name LIKE
BINARY '%7 Eleven%';
UPDATE business_table
SET `chain` = 'A&W'
WHERE business_name LIKE '%A & W%' OR business_name LIKE '%A&W%';
UPDATE business_table
SET `chain` = 'Blenz Coffee'
WHERE business_name LIKE BINARY '%Blenz Coffee%';
UPDATE business_table
SET `chain` = 'Booster Juice'
WHERE business_name LIKE BINARY '%Booster Juice%';
UPDATE business_table
SET `chain` = 'Boston Pizza'
WHERE business_name LIKE BINARY '%Boston Pizza%';
SET SQL_SAFE_UPDATES=1;
有更有效的方法嗎? 我嘗試將其放入存儲過程中而不禁用SQL_SAFE-UPDATES,如下所示:
UPDATE business_table b
SET `chain` = '7-Eleven'
WHERE b.id = (SELECT id FROM b WHERE business_name LIKE BINARY '%7-Eleven%' OR business_name LIKE BINARY '%7 Eleven%');
我收到此錯誤:
Error Code: 1093. You can't specify target table 'b' for update in FROM clause
因此,我了解此錯誤是什么,但我不知道如何解決該錯誤; 有數百條UPDATE語句。
想法?
是的,但這僅是因為您的update
需要全表掃描。 在模式的開頭將like
與通配符一起使用會阻止任何有用的索引。
因此,您可以執行以下操作:
UPDATE business_table
SET chain = (CASE WHEN business_name LIKE BINARY '%7-Eleven%' OR business_name LIKE
BINARY '%7 Eleven%' THEN '7-Eleven'
WHEN (business_name LIKE '%A & W%' OR business_name LIKE '%A&W%') THEN 'A&W'
. . .
END)
WHERE (business_name LIKE BINARY '%7-Eleven%' OR business_name LIKE
BINARY '%7 Eleven%') OR
(business_name LIKE '%A & W%' OR business_name LIKE '%A&W%') OR
. . .
您需要填寫WHERE
中的其余條件和CASE
的條件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.