[英]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.