Rumah  >  Soal Jawab  >  teks badan

Sisipan subquery gagal dalam MySQL 5.7

Saya sedang menulis migrasi data SQL untuk aplikasi yang perlu menyokong pelbagai pangkalan data yang mungkin, termasuk MySQL 5.7. Inilah kod semasa saya:

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;

Ralat semasa berjalan pada MySQL 5.7 Unknown column 's.table_id' in 'on clause'。我猜测在5.7版本中,ONKlausa ini lebih ketat daripada versi berikutnya, kerana ia berfungsi dengan baik dalam versi MySQL dan Postgres yang lain. Adakah terdapat sebarang cara untuk memintas sekatan ini? Atau adakah terdapat cara untuk menulis semula pertanyaan? Saya tidak begitu mahir dengan SQL jadi sebarang bantuan akan sangat dihargai.

P粉043295337P粉043295337283 hari yang lalu507

membalas semua(1)saya akan balas

  • P粉497463473

    P粉4974634732024-01-11 16:02:23

    Tidak jelas mengapa ralat itu berlaku, tetapi anda boleh membetulkannya dengan melakukannya dalam UPDATE 查询中使用 JOIN dan bukannya subkueri.

    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

    balas
    0
  • Batalbalas