Maison > Questions et réponses > le corps du texte
J'écris des migrations de données SQL pour une application qui doit prendre en charge plusieurs bases de données possibles, y compris MySQL 5.7. Voici mon code actuel :
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;
Erreur lors de l'exécution sur MySQL 5.7 Unknown column 's.table_id' in 'on clause'
。我猜测在5.7版本中,ON
La clause est plus stricte que les versions ultérieures, car elle fonctionne bien dans d'autres versions de MySQL et Postgres. Existe-t-il un moyen de contourner cette restriction ? Ou existe-t-il un moyen de réécrire la requête ? Je ne suis pas très bon avec SQL donc toute aide serait grandement appréciée.
P粉4974634732024-01-11 16:02:23
La raison pour laquelle l'erreur se produit n'est pas claire, mais vous pouvez la corriger en le faisant dans UPDATE
查询中使用 JOIN
au lieu d'une sous-requête.
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