mysql GROUP_CONCAT和INSERT进入另一个表的问题

时间:2012-04-26 18:48:27

标签: mysql insert group-concat insert-update

我有一个MySQL GROUP_CONCAT .... INSERT问题 此代码有效:

    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

3 个答案:

答案 0 :(得分:2)

我认为这就是你要做的事情:

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;

答案 1 :(得分:1)

您所描述的是UPDATE。不是INSERT

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 ;

随机咆哮:

为什么,为什么,为什么有这些table1tabel1tabel2tableX名称?任何对象(表,列,索引,约束,数据库)的名称应反映用法 table1什么也没说 除了你没有拼写检查你的名字外,tabel1什么也没说。

优良作法是外键约束中使用的列(以及作为连接的结果)具有相同的名称(如果可能)。一个表中不是imgname而另一个表中不是img_name。一个不是produit_id而另一个不是product_id。它可以帮助你,下一个程序员和那些试图帮助你完成SO的人,不要在写ON t2.produit_id = t1.produit_id时犯错误。如果您喜欢USING (product_id)语法而不是联接的ON语法,它也会有所帮助。

(更新)
似乎不同的名称是因为这些表来自不同的来源/数据库而且它不是您的选择。如果你有很多工作要做,我建议你改变它们以获得统一/合理的名字。如果这是一次性工作,只是传输/转换一些数据,请不要打扰。

答案 2 :(得分:-1)

您没有指定要插入的值

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('','')