Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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_Sql Server - Fatal编程技术网

Mysql 更新SQL查询

Mysql 更新SQL查询,mysql,sql,sql-server,Mysql,Sql,Sql Server,我正在编写一个SQL查询,其中我需要在相同的post\u id的基础上使用值更新虚拟冒号中的冒号,这样对于post\u id'1',所有行都将在其中有'abc' 类似地,对于post_id“2”所有行都将在dummy下的列中具有'def' post_id |meta_key|dummy 1 url abc 1 link Null 1 key Null 1 data Null 2 u

我正在编写一个SQL查询,其中我需要在相同的
post\u id
的基础上使用值更新虚拟冒号中的冒号,这样对于
post\u id'1'
,所有行都将在其中有
'abc'

类似地,对于
post_id“2”
所有行都将在dummy下的列中具有
'def'

post_id |meta_key|dummy
1         url      abc
1         link     Null
1         key      Null
1         data     Null
2         url      def
2         link     Null
2         key      Null
2         data     Null
我尝试的查询是:

update <table_name>
  set dummy = ( select meta_value 
                       from <table_name> 
                       where meta_key = 'url' 
                       AND post_id = '1'
               ) 
  where post_id IN ('1') ;
你可以用

我生成的查询如下所示:

var query = 'UPDATE <table_name> SET dummy = CASE post_id '+dummypart+'END 
WHERE post_id IN('+ids+')';
var query='updateset dummy=CASE post_id'+dummypart+'END
其中post_id位于('+ids+');
确切的查询现在将被删除

UPDATE <table_name> 
    SET dummy = CASE post_id 
    WHEN 1 THEN 'abc'
    WHEN 2 THEN 'def'
    END
    WHERE post_id IN(1,2)
更新
SET dummy=案例post\u id
当1然后是“abc”
当2时,则为“def”
结束
其中post_id位于(1,2)
如果值数组包含ID 1和ID 2;和相应的值。
因此,在单个查询中,我可以更新表中的多行我不知道您的确切要求。但由于您正在尝试生成动态查询,请尝试此操作。

首先,我会检查每个帖子id是否只有一个值,这样您就不会根据随机选择的几个可用值进行更新:

SELECT post_id, COUNT(DISTINCT dummy) dummyCount
FROM TABLE
WHERE dummy IS NOT NULL
GROUP BY post_id
HAVING COUNT(DISTINCT dummy) > 1
如果有结果,你应该检查一下

然后,如果每个post_id实际上只有一个非null伪值,则可以按照OP中的描述更新所有null,如下所示:

UPDATE T
SET dummy = SRC.dummy
FROM TABLE T
JOIN 
   (SELECT post_id, dummy
   FROM TABLE
   WHERE dummy IS NOT NULL) SRC ON SRC.post_id = T.post_id
--WHERE dummy IS NOT NULL > should not be used
WHERE dummy IS NULL

一个有10000个不同post\u id:s的案例?我无法硬编码这些值,因为我的post\u id超过10000个。@KlasLindbäck Lindbäck阅读问题。他提到“动态查询”。您需要在应用程序逻辑中生成查询。我用一个查询来更新一个表中的数百个条目。我无法使用100个查询来更新条目。这是一个解决方案@达莫达兰:我已经读过这个问题了。生成一个更新,其中包含大约10000个WHEN子句,这听起来不是一个好的解决方案。
UPDATE <table_name> 
    SET dummy = CASE post_id 
    WHEN 1 THEN 'abc'
    WHEN 2 THEN 'def'
    END
    WHERE post_id IN(1,2)
SELECT post_id, COUNT(DISTINCT dummy) dummyCount
FROM TABLE
WHERE dummy IS NOT NULL
GROUP BY post_id
HAVING COUNT(DISTINCT dummy) > 1
UPDATE T
SET dummy = SRC.dummy
FROM TABLE T
JOIN 
   (SELECT post_id, dummy
   FROM TABLE
   WHERE dummy IS NOT NULL) SRC ON SRC.post_id = T.post_id
--WHERE dummy IS NOT NULL > should not be used
WHERE dummy IS NULL
update Table_Name 
set dummy = Case when post_id='1' then 'abc'
                 when post_id='2' then 'def'
end
where post_id in('1','2')