我正在为一个需要支持多个可能的数据库(包括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不是很擅长,所以任何帮助都将不胜感激。
P粉4974634732024-01-11 16:02:23
目前还不清楚为什么会出现错误,但是你可以通过在 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