繁体   English   中英

在同一表中使用带有GROUP_CONCAT的SELECT语句进行UPDATE

[英]Doing UPDATE using a SELECT statement with GROUP_CONCAT within the same table

我正在尝试更新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 GROUP_CONCAT( d.data ORDER BY `no` SEPARATOR '-') AS data FROM
webform_submitted_data_copy d WHERE cid = "5" GROUP BY d.sid

这将返回在UPDATE之后的“数据”列中所需要的内容。但是我无法弄清楚如何形成正确的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行,并且没有失败...尝试了许多其他可能的语句而没有喜悦。

???

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

听起来您真的不想要UPDATE语句。 运行UPDATE ,您的表仍具有与以前相同的记录数; 但是听起来好像您希望它最终获得的记录数量是开始时的三分之一。 (对?)

因此,我认为您最好的选择是创建一个临时表。 像这样的东西:

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM