我有一张名为"客户"看起来像这样:
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万行。这可行吗?
好的抱歉这是我的错误,这个数字可以在任何一个列中!我更新了它。
答案 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;