Mysql 在同一个表中使用SELECT语句和GROUP_CONCAT执行更新

Mysql 在同一个表中使用SELECT语句和GROUP_CONCAT执行更新,mysql,drupal,select,Mysql,Drupal,Select,我正在尝试更新MySQL中的数据库表以合并行。下面是表格的哪一部分: NID SID CID NO DATA 5297 32002 5 0 10 5297 32002 5 1 17 5297 32002 5 2 1976 “数据”列包含构成日期的月份、日期和年份。因此,我想将这些记录合并为以下内容: 5297 32002 5 0 10-17-1976 对于每个SID,它包含一

我正在尝试更新MySQL中的数据库表以合并行。下面是表格的哪一部分:

NID     SID     CID     NO      DATA  
5297    32002   5   0   10  
5297    32002   5   1   17  
5297    32002   5   2   1976
“数据”列包含构成日期的月份、日期和年份。因此,我想将这些记录合并为以下内容:

5297    32002   5   0   10-17-1976
对于每个SID,它包含一个具有3个不同行的CID,由“否”列表示,并包含日期的三个部分

我可以使用此select语句获得所需的输出:

SELECT GROUP_CONCAT( d.data ORDER BY `no` SEPARATOR '-') AS data FROM
webform_submitted_data_copy d WHERE cid = "5" GROUP BY d.sid
这将返回更新后“data”列中所需的内容。但我不知道如何形成正确的UPDATE语句。。。比如:

UPDATE webform_submitted_data_copy 
SET webform_submitted_data_copy.data = (GROUP_CONCAT( d.data ORDER BY `no` SEPARATOR '-'))
WHERE webform_submitted_data_copy.cid = "5" GROUP BY webform_submitted_data_copy.sid
但这会影响0行,并且没有失败……毫无乐趣地尝试了许多其他可能的语句


有人知道我需要做什么才能使这项工作正常吗?

听起来你并不真的想要更新语句。运行更新后,表中的记录数仍与以前相同;但听起来你想让它的唱片数量达到开始时的三分之一。对吧?

所以我认为最好的办法是创建一个临时表;大概是这样的:

CREATE TABLE webform_submitted_data_copy_temp
SELECT d.nid, d.sid, d.cid, GROUP_CONCAT( d.data ORDER BY `no` SEPARATOR '-') AS data FROM
webform_submitted_data_copy d WHERE cid = "5" GROUP BY d.sid;

UPDATE webform_submitted_data_copy
   SET data =
        ( SELECT data
            FROM webform_submitted_data_copy_temp
           WHERE sid = webform_submitted_data_copy.sid
        )
 WHERE cid = '5'
   AND no = 0
;

DELETE webform_submitted_data_copy
 WHERE cid = '5'
   AND no > 0
;

DROP TABLE webform_submitted_data_copy_temp;

实际上,您应该在SQL中创建一个临时表;我不确定你是否可以在创建中使用临时。。。选择语法。但出于显而易见的原因,我不想在删除原始表的版本中使用临时表。在新版本中,如果可以的话,那就好了。谢谢ruakh!成功了。我应该考虑复制到另一个表来进行此操作…谢谢!