如何合并2个或更多类似的mysql行?

时间:2017-09-22 16:42:13

标签: mysql sql database sql-insert

我在MySQL中有表名为" temporarytransaction" ans" tbltransaction"

temporarytransaction和tbltransaction有3列名为"客户","服务呈现"和"日期"

所以例如临时交易有3个值

  内森|男士剪裁| 2017年9月23日

     内森|美甲| 2017年9月23日

     内森|按摩| 2017年9月23日

我需要做的是合并或连接所提供的服务"在tbltransaction。 是否有可能在tbltransaction中保存它?

  内森|男士剪裁,美甲,按摩| 2017年9月23日

我试过这个,但它并没有这样保存

INSERT INTO tbltransaction (customer,service,date) SELECT customer,service,date FROM temporarytransaction;";

3 个答案:

答案 0 :(得分:2)

您可以使用group_concat汇总service值:

INSERT INTO tbltransaction (customer,service,date)
SELECT      customer, GROUP_CONCAT(service SEPARATOR ','), date 
FROM        temporarytransaction
GROUP BY    customer, date

答案 1 :(得分:1)

假设您的组列为customer,您可以执行以下查询:

INSERT INTO `tbltransaction` (`customer`, `service`, `date`)
SELECT
  `temporarytransaction`.`customer`,
  GROUP_CONCAT(
    DISTINCT `temporarytransaction`.`service`
    ORDER BY `temporarytransaction`.`service`
  ) `service`,
  GROUP_CONCAT(
    DISTINCT `temporarytransaction`.`date`
    ORDER BY `temporarytransaction`.`date`
  ) `date`
FROM (
  SELECT 'Nathan' `customer`,
         'Men\'s Cut' `service`,
         '2017-09-23' `date`
  UNION ALL
  SELECT 'Nathan',
         'Nail Art',
         '2017-09-23'
  UNION ALL
  SELECT 'Nathan',
         'Massage',
         '2017-09-23'
) `temporarytransaction`
GROUP BY
  `temporarytransaction`.`customer`;

请参阅db-fiddle

请记住,结果被截断为group_concat_max_len系统变量给出的最大长度。

答案 2 :(得分:0)

SELECT tt.customer,(SELECT GROUP_CONCAT( tt1.service) FROM temporarytransaction tt1 WHERE  tt1.customer=tt.customer AND tt1.date=tt.date) AS service, tt.date FROM temporarytransaction tt GROUP BY tt.customer, tt.date