Sisipan subquery gagal dalam MySQL 5.7
P粉043295337
P粉043295337 2024-01-10 18:12:10
0
1
557

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粉043295337
P粉043295337

membalas semua(1)
P粉497463473

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
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan