在SQL中更新整个表?

时间:2015-07-19 14:42:20

标签: mysql sql

我有一张名为"客户"看起来像这样:

ID   | NAME     | ADDRESS  | ZIP
John | Peterson | Street 2 | 45738
Jan  | 74383    | Street 4 | 74383
Eric | Stone    | 74383    | 74383
Julia| Carry    | Street 9 | 74383

我想替换任何" 74383"用""。我有大约150万行。这可行吗?

好的抱歉这是我的错误,这个数字可以在任何一个列中!我更新了它。

3 个答案:

答案 0 :(得分:2)

假设您的意思是zip列:

update customers
    set zip = ''
    where zip = '74383';

注意:您可能更愿意将值设置为NULL而不是空字符串(''),但您的问题明确建议使用空字符串。

编辑:

如果您有索引,我实际上建议您为每列使用单独的update语句。 updates会更快。

其次,如果您将值替换为NULL而不是'',则可以使用逻辑:

update customers
    set zip = NULLIF(zip, '74383'),
        address = NULLIF(address, '74383'),
        name = NULLIF(name, '74383')
    where '74383' in (name, address, zip);

(您实际上可以使用COALESCE(NULLIF(zip, '74383'), '')将其替换为空字符串,但是一旦逻辑变得复杂,我更喜欢CASE。)

答案 1 :(得分:2)

反转IN运算符以在所有列中搜索“74383”值的存在,然后使用case语句更新列。试试这个。

UPDATE customers 
SET    NAME = CASE WHEN NAME = '74383' THEN '' ELSE NAME END, 
       address = CASE WHEN address = '74383' THEN '' ELSE address END, 
       zip = CASE WHEN zip = '74383' THEN '' ELSE zip END 
WHERE  '74383' IN ( NAME, address, zip ) 

答案 2 :(得分:1)

对我来说这样的要求很奇怪但是,无论如何,你可以试试这个:

START TRANSACTION;
UPDATE customers
SET NAME = ''
WHERE NAME = '74383';
UPDATE customers
SET ADDRESS = ''
WHERE ADDRESS = '74383';
UPDATE customers
SET ZIP = ''
WHERE ZIP = '74383';
COMMIT;