MySQL 5.7中的子查询插入失败
P粉043295337
P粉043295337 2024-01-10 18:12:10
0
1
515

我正在为一个需要支持多个可能的数据库(包括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粉043295337
P粉043295337

全部回复(1)
P粉497463473

目前还不清楚为什么会出现错误,但是你可以通过在 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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!