Mysql 在同一个表中使用SELECT语句和GROUP_CONCAT执行更新
我正在尝试更新MySQL中的数据库表以合并行。下面是表格的哪一部分: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,它包含一
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!成功了。我应该考虑复制到另一个表来进行此操作…谢谢!