我正在为一个需要支持多个可能的数据库(包括MySQL 5.7)的应用程序编写SQL数据迁移。以下是我目前的代码:
UPDATE sandboxes s
SET permission_id = (
SELECT p.id
FROM permissions p
JOIN tables t ON t.id = s.table_id
WHERE
p.object LIKE CONCAT('/db/', t.db_id, '/schema/', t.schema, '/table/', s.table_id, '/query/segmented/')
AND p.group_id = s.group_id
LIMIT 1
)
WHERE permission_id IS NULL;
在MySQL 5.7上运行时出现错误Unknown column 's.table_id' in 'on clause'。我猜测在5.7版本中,ON子句比后续版本更严格,因为它在其他版本的MySQL和Postgres中都能正常工作。有没有办法绕过这个限制?或者有没有办法重写查询?我对SQL不是很擅长,所以任何帮助都将不胜感激。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
目前还不清楚为什么会出现错误,但是你可以通过在
UPDATE查询中使用JOIN而不是子查询来解决它。UPDATE sandboxes s JOIN permissions AS p on p.group_id = s.group_id JOIN tables AS t ON t.table_id = s.table_id AND p.object = CONCAT('/db/', t.db_id, '/schema/', t.schema, '/table/', s.table_id, '/query/segmented/') SET s.permission_id = p.id