首页  >  问答  >  正文

MySQL 5.7中的子查询插入失败

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

全部回复(1)我来回复

  • P粉497463473

    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

    回复
    0
  • 取消回复