Heim  >  Fragen und Antworten  >  Hauptteil

Das Einfügen einer Unterabfrage schlägt in MySQL 5.7 fehl

Ich schreibe SQL-Datenmigrationen für eine Anwendung, die mehrere mögliche Datenbanken unterstützen muss, einschließlich MySQL 5.7. Hier ist mein aktueller Code:

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;

Fehler bei der Ausführung unter MySQL 5.7 Unknown column 's.table_id' in 'on clause'。我猜测在5.7版本中,ONDie Klausel ist strenger als nachfolgende Versionen, da sie in anderen Versionen von MySQL und Postgres einwandfrei funktioniert. Gibt es eine Möglichkeit, diese Einschränkung zu umgehen? Oder gibt es eine Möglichkeit, die Abfrage umzuschreiben? Da ich mit SQL nicht besonders gut bin, wäre ich für jede Hilfe sehr dankbar.

P粉043295337P粉043295337283 Tage vor510

Antworte allen(1)Ich werde antworten

  • 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

    Antwort
    0
  • StornierenAntwort