mysql组存在问题。\u CONCAT并插入到另一个表中

mysql组存在问题。\u CONCAT并插入到另一个表中,mysql,insert,group-concat,insert-update,Mysql,Insert,Group Concat,Insert Update,我有一个MySQL组。。。。插入问题 此代码适用于: SELECT group_concat(tabel2.img_name separator ',') FROM tabel2 GROUP BY tabel2.produit_id 我需要将结果插入到另一个表中,我被卡住了 这个或任何我能想到的组合都不起作用 INSERT INTO tabel1.imgname SELECT group_concat(tabel2.img_name separat

我有一个MySQL组。。。。插入问题 此代码适用于:

    SELECT group_concat(tabel2.img_name separator ',') 
    FROM tabel2 
    GROUP BY tabel2.produit_id 
我需要将结果插入到另一个表中,我被卡住了

这个或任何我能想到的组合都不起作用

    INSERT INTO tabel1.imgname
    SELECT group_concat(tabel2.img_name separator ',') 
    FROM tabel2 
    GROUP BY tabel2.produit_id 
    WHERE tabel1.product_id = tabel2.produit_id
我做错了什么

CREATE TABLE IF NOT EXISTS `tabel1` (
  `product_id` int(11) NOT NULL AUTO_INCREMENT,
  `rubrique_id` int(11) NOT NULL,
  `marque_id` int(11) NOT NULL,
  `subfamily_id` int(11) NOT NULL,
  `product_name` varchar(150) NOT NULL,
  `imgname` varchar(255) DEFAULT NULL,
  `product_description1` text NOT NULL,
  `product_description2` text NOT NULL,
  `product_order` int(11) NOT NULL,
  `product_page` int(11) NOT NULL,
  `price_min` float NOT NULL,
  PRIMARY KEY (`product_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=0;


    INSERT INTO `tabel1` (`product_id`, `rubrique_id`, `marque_id`, `subfamily_id`, `product_name`, `imgname`, `product_description1`, `product_description2`, `product_order`, `product_page`, `price_min`) 
VALUES
(33, 15, 23, 40, 'product 1', NULL, '', '', 0, 0, 0),
(34, 13, 13, 13, 'product 2', NULL, '', '', 0, 0, 0),
(35, 14, 14, 14, 'product 3', NULL, '', '', 0, 0, 0);



CREATE TABLE IF NOT EXISTS `tabel2` (
  `img_id` int(11) NOT NULL AUTO_INCREMENT,
  `img_name` text NOT NULL,
  `article_id` int(11) DEFAULT NULL,
  `produit_id` int(11) DEFAULT NULL,
  `product_select` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`img_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4018 ;

INSERT INTO `tabel2` (`img_id`, `img_name`, `article_id`, `produit_id`, `product_select`) 
VALUES
(4013, 'acoacki086050.jpg', 13342, 33, NULL),
(4014, '32252il6jh2dqex.jpg', NULL, 34, NULL),
(4015, '33265ulrzmgr18w.jpg', NULL, 34, NULL),
(4016, '40334zcfk0c4n67.jpg', NULL, 35, NULL),
(4017, '40473frd4900u82.jpg', NULL, 35, NULL);

所以对于tabel1.product_id=34,我需要tabel1.imgname=32252il6jh2dqex.jpg,33265ulrzmgr18w.jpg,我想这就是你想要做的:

INSERT INTO tabel1 (product_id,imgname)
SELECT tabel2.produit_id, group_concat(tabel2.img_name separator ',') as imgname
FROM tabel2 
GROUP BY tabel2.produit_id  
更新:感谢发布模式并澄清需求

这应该适合您:

UPDATE tabel1
INNER JOIN 
(
SELECT tabel2.produit_id, group_concat(tabel2.img_name separator ',') AS imgname
FROM tabel2 
GROUP BY tabel2.produit_id 
) s ON s.produit_id = tabel1.product_id
SET tabel1.imgname = s.imgname;

您没有指定要插入的值

INSERT INTO tabel1.imgname
SELECT group_concat(tabel2.img_name separator ',') 
FROM tabel2 
GROUP BY tabel2.produit_id 
WHERE tabel1.product_id = tabel2.produit_id
VALUES('','')
etc

您描述的是更新。不插入:

随机咆哮:

为什么,为什么,为什么你有这些表1,表1,表2,表x的名字?表、列、索引、约束和数据库的任何对象的名称都应反映使用情况。 表1没有说明什么。 表1除了不检查姓名拼写外,什么也没说


最好的做法是,外键约束中使用的列以及作为连接的结果的列,如果可能的话,具有相同的名称。不是一个表中的imgname和另一个表中的img_名称。一个中没有产品id,另一个中没有产品id。它可以帮助你,下一个程序员和那些试图帮助你的人,避免在t2.produit\u id=t1.produit\u id上写错误。如果你喜欢使用product\u id语法而不是ON语法进行连接,它也可以帮助你

更新
不同的名称似乎是因为表来自不同的源/数据库,而不是您的选择。如果你有很多工作要做,我建议你把它们改成统一/合理的名字。如果这是一项一次性工作,只需传输/转换一些数据,就不用麻烦了。

该语法无效。INSERT…SELECT和INSERT…值是互斥的。我已经有tabel1product_id。我需要更新吗?可能是tabel1imgname,以及我从GROUP_CONCAT获得的任何结果,应用WHERE clauseI get错误1046-在您的解决方案和ypercube的解决方案中均未选择任何数据库。我开始觉得自己有点傻了。就像我距离我需要做的事情只有1英寸,但我看不到一样;是的,它起作用了。当我添加db_名称时,我犯了一个错误,当然它没有立即工作。我应该在一段时间以前,在一个合理的时间,当我头脑清醒的时候,把我的问题公布出来。感谢您的帮助:请提供tabel1和tabel2的完整模式,以及您希望查询执行的操作的描述。我刚才看到了评论,我已经用所述表更新了我的帖子,以及我需要执行的操作。更糟的是,更糟的是,我将concat导出为csv,然后从csv文件中更新该列。但是我不想这么做,尤其是因为表太大了,你不需要插入,你可能需要更新。只要能完成任务,我会用什么并不重要。更新也不起作用,我已经试过了。谢谢你的方案和要求。这很有帮助。我已经用一个应该适合你的查询更新了by answer。现在我得到这个错误:1046-没有选择数据库。但我会继续尝试使用JOIN,看看它是如何发展的。谢谢,那太容易了。添加db_name.tabel1和db_name.tabel2会导致在“on子句”中出现1054-未知列“t1.produit_id”。进一步添加db_name.t1和db_name.t2会导致1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解使用near.t1 JOIN SELECT produit_id,GROUP_CONCATimg_name SEPARAT'在第2行将t2.produit_id=t1.produit_id改为t2.produit_id=t1.produit_id=t1.produit_id应该在t2.produit_id=t1.produit上,并且,当然有db_name.tabel1和db_name.tabel2。哇,非常感谢!我很高兴,萝莉,我又读了一遍,我看到了。请更新你的帖子,以便它显示正确的答案,以防其他人需要相同的东西。
UPDATE
    tabel1 AS t1
  JOIN
    ( SELECT produit_id
           , GROUP_CONCAT(img_name SEPARATOR ',') AS grp_img_name
      FROM tabel2 
      GROUP BY produit_id
    ) AS t2
        ON t2.produit_id = t1.product_id
SET
    t1.imgname = t2.grp_img_name ;