MySQL: как обновить таблицу и поля, зависящие от значений в других таблицах? - PullRequest
1 голос
/ 28 июля 2010

У меня есть база данных со странными данными. К счастью, он постоянно обманчив, поэтому я должен иметь возможность запустить на нем хороший SQL-запрос и очистить его. Вот история:

Table 'uc_products':
nid   model
1     asdf
2     qwer
3     ghjk

Table 'uc_product_stock':
nid   sku 
1     asdf
22    qwer
34    ghjk

Итак, вы можете видеть, что модель = sku, а nid = nid. В таблице uc_products содержатся все правильные данные, а в таблице uc_product_stock содержатся неверные данные (nid, которые не совпадают с sku). Я хочу просмотреть uc_product_stock и сравнить каждую запись с uc_product:

  • Где модель == sku & nid == nid: да! Данные хорошие!
  • Где модель == sku & nid! = Nid: boo! Неверные данные, поэтому файл uc_stock_product.nid следует обновить, чтобы он соответствовал значению в файле uc_product.nid

[Я полагаю, что более грубым способом сделать это было бы сопоставление каждой строки в SKU / модели и сброс каждого uc_product_stock.nid для соответствия uc_product.nid - главное, что неправильные будут исправлены правильные будут сброшены на то же значение и останутся правыми. Я открыт для этого, если вы думаете, что это лучший ответ, но это заставляет меня чувствовать себя немного смешно. Я не люблю связываться с данными, которые уже верны.]

Спасибо за любую помощь!

Ответы [ 2 ]

1 голос
/ 28 июля 2010

Можете ли вы просто запустить простую инструкцию обновления, такую ​​как:

UPDATE uc_product_stock a
  SET a.nid = (SELECT MIN(b.nid)
                 FROM uc_products b
                WHERE b.sku = a.sku)
0 голосов
/ 28 июля 2010

Я не проверял это, но это должно работать:

UPDATE uc_product_stock AS s 
INNER JOIN uc_product AS p ON p.model=s.sku SET s.sku=p.model 
WHERE p.nid!=s.nid AND p.model=s.sku
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...