我正在尝试更新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
这将返回UPDATE后'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行,并且没有失败......尝试了许多其他可能的陈述而没有任何快乐。
???
任何人都知道我需要做些什么来使这项工作?
答案 0 :(得分: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;