Heim > Fragen und Antworten > Hauptteil
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版本中,ON
Die 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粉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