Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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从查询更新行_Mysql_Group Concat - Fatal编程技术网

MySQL从查询更新行

MySQL从查询更新行,mysql,group-concat,Mysql,Group Concat,我有一个复杂的(对我来说!)查询,基本上是从两个表中获取数据,然后将它们分组到一起(这一点作为选择查询100%工作) 但是当我现在需要更新另一个表中的数据库时,它将无法工作 我有这个: UPDATE exp_channel_data data, ( SELECT posts.cat_id, posts.entry_id, cats.cat_name, cats

我有一个复杂的(对我来说!)查询,基本上是从两个表中获取数据,然后将它们分组到一起(这一点作为选择查询100%工作)

但是当我现在需要更新另一个表中的数据库时,它将无法工作

我有这个:

UPDATE 
    exp_channel_data data,
    (
        SELECT 
            posts.cat_id, 
            posts.entry_id, 
            cats.cat_name, 
            cats.cat_id,
            GROUP_CONCAT('{"',cats.cat_name, '"}:{"',cats.cat_name,'"}') as category_tag
        FROM 
            exp_category_posts posts, 
            exp_categories cats
        WHERE 
            cats.cat_id = posts.cat_id
        GROUP BY 
            posts.entry_id
    ) category
SET
    data.field_id_178 = category.category_tag
WHERE 
     data.entry_id = category.entry_id;
但我得到了一个错误:

重复的列名“cat_id”

我想这是因为我试图在两个表之间建立连接,但它没有链接

正如我所说,SELECT查询本身就可以工作,但是当被放入更新时,它只会抛出这个错误


:(

您非常接近您所需要的:

UPDATE exp_channel_data data JOIN
       (SELECT posts.entry_id,
               GROUP_CONCAT('{"',cats.cat_name, '"}:{"',cats.cat_name,'"}') as category_tag
        FROM exp_category_posts posts JOIN
             exp_categories cats
             ON cats.cat_id = posts.cat_id
        GROUP BY posts.entry_id
       ) category
       ON data.entry_id = category.entry_id
    SET data.field_id_178 = category.category_tag;
重要的部分是从子查询中删除
cats.cat_id
。您有两个同名的列,这是MySQL


我还修复了查询,以使用正确、明确的
JOIN
语法。

尝试为同名列设置别名:选择post.cat_id作为pcat_id等。太棒了,谢谢,这更有意义。我确实尝试了JOIN,但从外观上看,我一直把它放在错误的位置。不过我使用了左JOIN?无论如何,太棒了-谢谢!