我有一个小问题我有两个具有相同结构的mysql表“data”和“datas”。问题是第一个数据表已经填满并包含我想要迁移到第二个表“datas”的数据,但是我有一个字段,我刚刚在两个表中添加了一个调用“status”的字段,在填写此字段之前我检查状态是“专业”还是“分享”。 但是在第一个表“数据”上,由于我刚刚添加了状态字段,之前存储的数据,状态为NULL。 我想要做的是创建一个脚本,将所有存储的数据“数据”和每行进行验证,并用“pro”或“part”填充“status”字段,并将所有deuxièeme存储在表中“ DATAS”。
我使用Mysql。 我需要一个脚本来检查每一行,看看状态是“专业”还是“部分”,如果你有想法,请不要犹豫告诉我。
picture of data table structure
提前谢谢。
答案 0 :(得分:0)
假设两个表中的所有字段都具有相同的顺序,状态是最后一个字段。
INSERT INTO datas(iddata,content, date, total, updatedate, statut)
SELECT iddata,content, date, total, updatedate,
case when 1=1 then 'Pro' else 'Share' end as statut
FROM data D
显然,您必须更新案例陈述以符合确定专业与分享的规则。
您应该可以使用JSON_Extract()在假设它始终位于json文档中的相同位置之后提取您的特定类型。
所以给出你的json文档...类似......但如果你不想要确切的值,可能需要将它包装在case语句中。你可能需要改变字段" status"到包含json的表中的正确字段名称。
INSERT INTO datas(iddata,content, date, total, updatedate, statut)
SELECT iddata,content, date, total, updatedate,
JSON_EXTRACT(status, "$.type") as statut
FROM data D
答案 1 :(得分:0)
INSERT INTO DATAS(IDDATA, CONTENT, DATE, TOTAL, UPDATEDATE, STATUT)
SELECT
IDDATA,
CONTENT,
DATE,
TOTAL,
UPDATEDATE,
CASE VARIABLE
WHEN 'CONDITION' THEN 'PRO'
WHEN 'CONDITION' THEN 'PART'
ELSE 'DEFAULT_VALUE'
END AS STATUT
FROM DATA
如果你的mysql版本可用,你可以使用JSON_EXTRACT,但json内容必须格式良好。
JSON_EXTRACT('{"pk": "12", "order": "1234","type":"part"}', '$.type')
完整示例
INSERT INTO DATAS(IDDATA, CONTENT, DATE, TOTAL, UPDATEDATE, STATUT)
SELECT
IDDATA,
CONTENT,
DATE,
TOTAL,
UPDATEDATE,
CASE JSON_EXTRACT(CONTENT, '$.type')
WHEN 'pro' THEN 'PRO'
WHEN 'part' THEN 'PART'
ELSE NULL
END AS STATUT
FROM DATA