使用MySQL在EXISTS条件下更改表 上下文

使用MySQL在EXISTS条件下更改表 上下文,mysql,Mysql,我有一个旧数据库,其关系基于字符串(人名),而不是id。例如,一个人名有许多注释通过注释表上的人名列连接 我想通过将列person\u name更改为person\u id来解决这个问题 建立新的关系 它包括在comments上创建新的person\u id列,并更新值: UPDATE comments SET person_id = (SELECT id FROM people WHERE LOWER(person_name) = name); 删除旧列 我不能直接删除人名并更新外

我有一个旧数据库,其关系基于字符串(人名),而不是id。例如,一个
人名
有许多
注释
通过
注释
表上的
人名
列连接

我想通过将列
person\u name
更改为
person\u id
来解决这个问题

建立新的关系 它包括在
comments
上创建新的
person\u id
列,并更新值:

UPDATE comments SET 
    person_id = (SELECT id FROM people WHERE LOWER(person_name) = name);
删除旧列 我不能直接删除
人名
并更新外键。我需要确保所有评论都与作者有适当的链接。通过简单地选择所有具有
person\u name
但具有空
person\u id
的注释,我可以发出红旗,因为此迁移将自动应用于许多表

SELECT 1 FROM comments WHERE person_id IS NULL AND person_name IS NOT NULL
请注意,有些注释是匿名的,因此
人名
可以是
NULL

迁移 要做到这一点,我可以做到:

IF EXISTS(SELECT 1 FROM comments WHERE person_id IS NULL AND person_name IS NOT NULL) 
THEN
    ALTER TABLE comments
    DROP COLUMN person_name;
END IF;
不幸的是,这似乎只适用于MSSQL,而不适用于MySQL


我可以使用什么替代方法?

您正在尝试在MySQL上执行SQL Server(MSSQL)语法。。MySQL不支持普通查询中的flowcontrol,您可以将其重写为MySQL支持flowcontrol的存储过程。我删除了我的答案,因为有注释“在您的交易中,您没有条件。如何确保从更新中选择的内容与行匹配?。您可以有一个旧的\u id not null和一个新的\u id null。" .. 换言之,
ALTER。。。DROP…
仅当
新\u id为空且旧\u id不为空时才会发生。
对于整个表为真?。。。。你的问题真的不太清楚。。我建议您提供示例数据和预期结果。为了提供阅读@RaymondNijland的建议,我对我的问题进行了更具体的编辑。您正在尝试在MySQL上执行SQL Server(MSSQL)语法。。MySQL不支持普通查询中的flowcontrol,您可以将其重写为MySQL支持flowcontrol的存储过程。我删除了我的答案,因为有注释“在您的交易中,您没有条件。如何确保从更新中选择的内容与行匹配?。您可以有一个旧的\u id not null和一个新的\u id null。" .. 换言之,
ALTER。。。DROP…
仅当
新\u id为空且旧\u id不为空时才会发生。
对于整个表为真?。。。。你的问题真的不太清楚。。我建议您提供示例数据和预期结果。为了给我提供阅读@RaymondNijland的建议,我将我的问题编辑得更具体一些。