首頁  >  問答  >  主體

MySQL 5.7中的子查詢插入失敗

我正在為一個需要支援多個可能的資料庫(包括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粉043295337P粉043295337283 天前506

全部回覆(1)我來回復

  • P粉497463473

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

    目前還不清楚為什麼會出現錯誤,但是你可以透過在 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

    回覆
    0
  • 取消回覆