Mysql - объединить две таблицы, сохранив предыдущие данные - PullRequest
1 голос
/ 10 марта 2019

Как мне обновить sales в таблице 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 голосов
/ 10 марта 2019

Кажется, вам нужны значения, разделенные запятыми

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

, но вы должны избегать использования значений, разделенных запятыми, вам следует взглянуть на нормализацию.

0 голосов
/ 10 марта 2019

Вы можете использовать следующее решение, используя 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;

демо на dbfiddle.uk

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...