Mysql 在SQL中更新整个表?
我有一张名为“customers”的表,如下所示:Mysql 在SQL中更新整个表?,mysql,sql,Mysql,Sql,我有一张名为“customers”的表,如下所示: 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万行。这可行吗 好的,对不起,这是我的错误,号
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万行。这可行吗
好的,对不起,这是我的错误,号码可以在任何列中!我更新了它。假设您的意思是在
zip
列中:
update customers
set zip = ''
where zip = '74383';
注意:您可能更愿意将值设置为NULL
,而不是空字符串('
),但您的问题明确地建议使用空字符串
编辑:
事实上,我建议您对每一列使用单独的update
语句,如果您有索引的话。更新
会快得多
其次,如果将值替换为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'),'')将其替换为空字符串。
,但一旦逻辑变得复杂,我更喜欢大小写。假设您在zip
列中的意思是:
update customers
set zip = ''
where zip = '74383';
注意:您可能更愿意将值设置为NULL
,而不是空字符串('
),但您的问题明确地建议使用空字符串
编辑:
事实上,我建议您对每一列使用单独的update
语句,如果您有索引的话。更新
会快得多
其次,如果将值替换为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'),'')
将其替换为空字符串,但一旦逻辑变得复杂,我更喜欢使用大小写)。这样的要求对我来说很奇怪,但无论如何,您可以尝试以下方法:
START TRANSACTION;
UPDATE customers
SET NAME = ''
WHERE NAME = '74383';
UPDATE customers
SET ADDRESS = ''
WHERE ADDRESS = '74383';
UPDATE customers
SET ZIP = ''
WHERE ZIP = '74383';
COMMIT;
对我来说,这样的要求很奇怪,但无论如何,你可以试试这个:
START TRANSACTION;
UPDATE customers
SET NAME = ''
WHERE NAME = '74383';
UPDATE customers
SET ADDRESS = ''
WHERE ADDRESS = '74383';
UPDATE customers
SET ZIP = ''
WHERE ZIP = '74383';
COMMIT;
在
运算符中反转,搜索所有列中是否存在“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 )
在
运算符中反转,搜索所有列中是否存在“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 )
是否要更新ZIP
列?是否要更新ZIP
列?这仅适用于ZIP列。不幸的是,op改变了关于你的问题:)是(姓名、地址、邮政编码)SARGable中的谓词“74383”吗?@HamletHakobyan。您可能会注意到,出于这个原因,我建议将其作为单独的语句来执行。不幸的是,op改变了关于你的问题:)是(姓名、地址、邮政编码)SARGable中的谓词“74383”吗?@HamletHakobyan。您可能会注意到,出于这个原因,我建议将其作为单独的语句来执行。在(NAME,address,zip)
SARGable中的谓词'74383'是否可搜索?在(NAME,address,zip)
SARGable中的谓词'74383'是否可搜索?