2014-01-13 45 views
1

我有4個表格,其中一個我需要更新。更新JOIN和GROUP_CONCAT

  • 表T1需要根據在表T2(t1.id = t2.id)

  • 表t2包含約網站(e.g.ID,業務)信息的信息被更新。

  • 表T3是上午:N表中,基於語言代碼(ISO2)表T4語言鏈接標識表T2(例如XID:1 | ISO2:EN,DE,FR)

  • 表T4包含ISO2-代碼(例如EN,DE,FR)和相應的語言(英語,德語,法語)

現在我需要更新基於該信息表T1的語言欄在表格t2,t3,t4中。

我寫了下面的查詢,但它說,SQL錯誤(1111):無效使用組功能*的/

UPDATE t1 
LEFT JOIN t2 
ON   t1.id = t2.id 
LEFT JOIN t3 
ON   t2.id = t3.X_id 
LEFT JOIN t4 
ON   t3.languages_iso2 = t4.iso2 
SET t1.languages = GROUP_CONCAT(t4.`language` ORDER BY t4.language ASC) 

我知道,這種解決方案不可能是最優雅的,但我SQL技能不是很好,所以我不知道我應該嘗試什麼。有沒有人有這個問題的解決方案? 在此先感謝!

+0

刪除'ORDER BY t4.language ASC'幹嘛還要用呢? –

+0

這看起來很糟糕。 – Strawberry

回答

1

試試這個:

UPDATE t1 
INNER JOIN (SELECT t2.id, GROUP_CONCAT(t4.language ORDER BY t4.language) languages 
      FROM t2 
      INNER JOIN t3 ON t2.id = t3.X_id 
      INNER JOIN t4 ON t3.languages_iso2 = t4.iso2 
      GROUP BY t2.id 
     ) AS t2 ON t1.id = t2.id 
SET t1.languages = t2.languages;