Mysql-通过保留先前的数据来合并两个表

时间:2019-03-10 16:06:44

标签: mysql phpmyadmin

如何根据sales的{​​{1}}(其中products = sales)中的productsUPDATE更新products.id表中的productsUPDATE.id,同时保留先前的数据products个数字?

这是我的两个桌子:

# products     # productsUPDATE
id  Sales      id  Sales   
---|-----|     ---|-----|
1  | 10  |     1  | 40  |  
2  | 11  |     2  | 50  | 
3  | 12  |     3  | 80  | 

我尝试执行此查询,但是在products表中丢失了数据销售:

UPDATE products 
INNER JOIN productsUPDATE ON products.id = productsUPDATE.id 
SET products.sales = productsUPDATE.sales 
WHERE productsUPDATE.id = products.id

查询输出:

# products     # productsUPDATE
id  Sales      id  Sales   
---|-----|     ---|-----|
1  | 40  |     1  | 40  |  
2  | 50  |     2  | 50  | 
3  | 80  |     3  | 80  | 

所需的输出:

# products      # productsUPDATE
id    Sales     id  Sales   
---|--------|   ---|-----|
1  | 40,10  |   1  | 40  |  
2  | 50,11  |   2  | 50  | 
3  | 80,12  |   3  | 80  | 

2 个答案:

答案 0 :(得分:0)

您可以使用CONCAT_WS使用以下解决方案:

UPDATE products 
INNER JOIN productsUPDATE ON products.id = productsUPDATE.id 
SET products.sales = CONCAT_WS(',', products.sales, productsUPDATE.sales)
WHERE productsUPDATE.id = products.id

除了将数据存储在products表上之外,您还可以使用VIEW

CREATE VIEW products_current AS
    SELECT p.id, CONCAT_WS(',', GROUP_CONCAT(DISTINCT p.Sales), GROUP_CONCAT(pu.Sales SEPARATOR ',')) 
    FROM products p INNER JOIN productsUPDATE pu ON p.id = pu.id GROUP BY p.id;
  

demo on dbfiddle.uk

答案 1 :(得分:0)

似乎要用逗号分隔值

UPDATE products 
INNER JOIN productsUPDATE ON products.id = productsUPDATE.id 
SET products.sales = concat(products.sales,',',sproductsUPDATE.sales )

但是您应该避免使用逗号分隔的值,而应该看一下标准化..