Maison  >  Questions et réponses  >  le corps du texte

L'insertion de sous-requête échoue dans MySQL 5.7

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粉043295337P粉043295337283 Il y a quelques jours505

répondre à tous(1)je répondrai

  • P粉497463473

    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

    répondre
    0
  • Annulerrépondre