Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用JOIN和GROUP_CONCAT更新_Mysql_Sql_Join_Sql Update_Group Concat - Fatal编程技术网

Mysql 使用JOIN和GROUP_CONCAT更新

Mysql 使用JOIN和GROUP_CONCAT更新,mysql,sql,join,sql-update,group-concat,Mysql,Sql,Join,Sql Update,Group Concat,我有4个表,其中一个需要更新 表t1需要根据表t2中的信息进行更新(t1.id=t2.id) 表t2包含有关网站的信息(例如ID、流量) 表t3是一个m:n表,它根据语言代码(ISO2)(例如XID:1 | ISO2:EN、DE、FR)将表t2中的ID与表t4中的语言链接起来 表t4包含ISO2代码(例如EN、DE、FR)和相应语言(英语、德语、法语) 现在我需要根据表t2、t3、t4中的信息更新表t1中的语言列 我已经编写了以下查询,但它显示SQL错误(1111):组函数的使用无效*/ U

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

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

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

  • 表t3是一个m:n表,它根据语言代码(ISO2)(例如XID:1 | ISO2:EN、DE、FR)将表t2中的ID与表t4中的语言链接起来

  • 表t4包含ISO2代码(例如EN、DE、FR)和相应语言(英语、德语、法语)

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

我已经编写了以下查询,但它显示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技能不是很好,所以我不知道我还应该尝试什么。有人能解决这个问题吗? 提前谢谢

试试这个:

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;

按t4删除
订单。语言ASC
为什么要使用它?这看起来是个坏主意。