Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在SQL中更新整个表?_Mysql_Sql - Fatal编程技术网

Mysql 在SQL中更新整个表?

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万行。这可行吗 好的,对不起,这是我的错误,号

我有一张名为“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万行。这可行吗


好的,对不起,这是我的错误,号码可以在任何列中!我更新了它。

假设您的意思是在
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'是否可搜索?