簡體   English   中英

MySQL根據另一個字段中的值更新字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM