我正在為一個(gè)需要支援多個(gè)可能的資料庫(包括MySQL 5.7)的應(yīng)用程式編寫SQL資料遷移。以下是我目前的程式碼:
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;
在MySQL 5.7上執(zhí)行時(shí)出現(xiàn)錯(cuò)誤Unknown column 's.table_id' in 'on clause'
。我猜在5.7版本中,ON
子句比後續(xù)版本更嚴(yán)格,因?yàn)樗谄渌姹镜腗ySQL和Postgres中都能正常運(yùn)作。有沒有辦法繞過這個(gè)限制?或者有沒有辦法重寫查詢?我對(duì)SQL不是很擅長,所以任何幫助都將不勝感激。
目前還不清楚為什麼會(huì)出現(xiàn)錯(cuò)誤,但是你可以透過在 UPDATE
查詢中使用 JOIN
而不是子查詢來解決它。
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