1

我有一个 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

4

3 回答 3

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;
于 2012-04-26T18:51:59.180 回答
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 ;

随意吐槽:

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

外键约束中使用的列(以及作为连接的结果)具有相同的名称(如果可能)是一种很好的做法。不在imgname一张桌子和img_name另一张桌子上。不是produit_id在一个和product_id另一个。它可以帮助您,下一个程序员和试图帮助您解决 SO 的人,不要在编写时出错ON t2.produit_id = t1.produit_idUSING (product_id)如果您喜欢语法而不是连接的语法,它也会有所帮助ON

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

于 2012-04-26T19:56:41.803 回答
-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('','')

ETC

于 2012-04-26T18:52:40.090 回答