使用JOIN和GROUP_CONCAT更新

时间:2014-01-13 10:59:21

标签: mysql sql join sql-update group-concat

我有4个表,其中一个我需要更新。

  • 表t1需要根据表t2中的信息进行更新(t1.id = t2.id)

  • 表t2包含有关网站的信息(例如ID,流量)。

  • 表t3是am:n table,它根据语言代码(ISO2)将表t2中的ID与表t4中的语言相关联(例如XID:1 | ISO2:EN,DE,FR)

  • 表t4包含ISO2代码(例如EN,DE,FR)和各自的语言(英语,德语,法语)

现在我需要根据表t2,t3,t4中的信息更新表t1中的语言列。

我写了以下查询,但是它说SQL Error(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技能并不是那么好,所以我不知道还应该尝试什么。有没有人有这个问题的解决方案? 提前谢谢!

1 个答案:

答案 0 :(得分: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;