L'insertion de sous-requête échoue dans MySQL 5.7
P粉043295337
P粉043295337 2024-01-10 18:12:10
0
1
552

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版本中,ONLa 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粉043295337
P粉043295337

répondre à tous(1)
P粉497463473

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
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal