MySQL 5.7中的子查詢插入失敗
P粉043295337
P粉043295337 2024-01-10 18:12:10
0
1
558

我正在為一個需要支援多個可能的資料庫(包括MySQL 5.7)的應用程式編寫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上執行時出現錯誤Unknown column 's.table_id' in 'on clause'。我猜在5.7版本中,ON子句比後續版本更嚴格,因為它在其他版本的MySQL和Postgres中都能正常運作。有沒有辦法繞過這個限制?或者有沒有辦法重寫查詢?我對SQL不是很擅長,所以任何幫助都將不勝感激。

P粉043295337
P粉043295337

全部回覆(1)
P粉497463473

目前還不清楚為什麼會出現錯誤,但是你可以透過在 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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板