Das Einfügen einer Unterabfrage schlägt in MySQL 5.7 fehl
P粉043295337
P粉043295337 2024-01-10 18:12:10
0
1
551

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粉043295337
P粉043295337

Antworte allen(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
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage