2015-06-10 4 views
1

Это как моя таблица статьи выглядит следующим образом: (tbl_articles)цены Обновление в MySQL

ID | SHORT_DESCRIPTION | DESCRIPTION | GROSS | NET 
1 | v00556   | valve washroom | 9.00 | 7.49 

т.д.

Мой поставщик предоставил мне новый прайс-лист, в этом формате (tbl_supplier)

SHORT_DESCRIPTION | DESCRIPTION | GROSS | NET 
v0056    | valve washroom | 9.50 | 7.99 

Как я могу изменить свой прайс-лист на его цены? У нас есть общая колонка описания, но у него также есть новые статьи. Оба списка содержат более 10 000 статей, а экспорт в excel + вертикальный поиск не работает.

Я попытался это, но без успеха:

UPDATE 
    tbl_articles 
SET 
    Gross = 
    (
     SELECT 
      Gross 
     FROM 
      tbl_supplier 
     WHERE 
      tbl_articles.SHORT_DESCRIPTION = tbl_supplier.SHORT_DESCRIPTION 
    ) 

НЕДОСТАТКИ:

  • Новые продукты не добавляются в моей таблице
  • Не можете обновить 2 поля
+1

есть ли 'tbl_articles' таблица УНИКАЛЬНЫЙ индекс' SHORT_DESCRIPTION'? Вам понадобится один, чтобы иметь возможность вставлять и обновлять существующие записи без более сложной логики кода. –

+0

, если у вас есть уникальный индекс в кратком описании, тогда выполните 'insert ... при дублировании ключевого обновления' – Dimi

+0

да, все short_descriptions уникальны! – user3253002

ответ

2

Создать уникальный индекс на short_description:

create unique index idx_articles_shortdesc on articles(short_description); 

Затем используйте insert . . . on duplicate key update:

insert into tbl_articles(SHORT_DESCRIPTION, DESCRIPTION, GROSS, NET) 
    select s.SHORT_DESCRIPTION, s.DESCRIPTION, s.GROSS, s.NET 
    from tbl_supplier s 
    on duplicate key update gross = values(gross), net = values(net); 

Вы не указали, что вы хотите обновить описание, чтобы оно не было включено.

В качестве примечания. Возможно, вам захочется исследовать медленно меняющиеся таблицы измерений. Я думаю, что лучшая структура будет иметь эффективную дату и дату окончания каждой цены. Это позволяет сохранить историю изменений цен. Кроме того, я бы сохранил дату создания записи, поэтому я знаю, когда были представлены продукты.

2

Если предположить, что SHORT_DESCRIPTION Поле является фактическим основным/уникальным в таблице, проще всего сделать w ульд быть иметь insert заявление с on duplicate key update пункта:

INSERT INTO tbl_articles 
(short_description, description, gross, net) -- Assumes ID is autogenerated 
SELECT short_description, description, gross, net 
FROM tbl_supplier 
ON DUPLICATE KEY UPDATE gross = VALUES(gross), net = VALUES(net) 
1

Вы можете использовать запрос UPDATE с объединением:

UPDATE 
    tbl_articles a INNER JOIN tbl_supplier s 
    ON a.short_description = s.short_description 
SET 
    a.gross=s.gross, 
    a.net=s.net