此查询按项目为您获取所有现有版本的所有 3 字符版本名称:
SELECT DISTINCT v.project_id, Left(v.name, 3) newversionname
FROM issues i
INNER JOIN versions v ON i.fixed_version_id=v.id
您需要一个列表,其中包含所有尚不存在的 3 字符版本名称:
SELECT f.project_id, f.newversionname
FROM (
SELECT DISTINCT v.project_id, Left(v.name, 3) newversionname
FROM issues i INNER JOIN versions v ON i.fixed_version_id=v.id
) f
LEFT OUTER JOIN versions v2 ON f.project_id = v2.project_id and f.newversionname=v2.name
WHERE v2.project_id is null
您需要为上述查询的每个结果插入新版本(我会将上述查询的改编作为INSERT
查询留给您......)。
编辑:更新查询以添加版本详细信息
SELECT f.project_id, f.newversionname, v3.description, v3.created_on, v3.updated_on
FROM (
SELECT v.project_id, Left(v.name, 3) newversionname, MIN(v.id) minversionid
FROM issues i INNER JOIN versions v ON i.fixed_version_id=v.id
GROUP BY v.project_id
) f
LEFT OUTER JOIN versions v2 ON f.project_id = v2.project_id and f.newversionname=v2.name
INNER JOIN versions v3 ON f.minversionid=v3.id
WHERE v2.project_id is null
这将简单地为每个新版本选择具有最低 id 的版本的详细信息。
注意:如果您的版本大于 9(即11.234
变为11.
),这将中断。
现在我们现在,对于与旧版本相关的每个问题,都存在一个新的 3 字符版本。以下查询显示了哪一个:
SELECT DISTINCT i.id, v.id oldversionid, v.name oldversionname, v2.id newversionid, v2.name newversionname
FROM issues i
INNER JOIN versions v ON i.fixed_version_id=v.id
INNER JOIN versions v2 ON LEFT(v.name, 3) = v2.name and v.project_id = v2.project_id
WHERE v.id <> v2.id
您可以使用此查询并UPDATE
在经过健全性检查后将其调整为查询。您仍然需要添加标准来区分打开和关闭的问题 ( status_id
)。
希望这对您的迁移有所帮助,享受 redmine 的乐趣!