Как обновить таблицу, используя 2 соединения? - PullRequest
0 голосов
/ 08 сентября 2011

У меня есть база данных eshop, и я продублировал некоторые продукты, чтобы переместить их в другую категорию (wholesale/retail). Мне нужно обновить category_id для каждого продукта с '[CLONE]' в названии, вот что я делаю:

Сначала я проверяю, сколько продуктов нужно переместить:

select p.product_id, pd.product, pc.category_id
from cscart_products p
join `cscart_product_descriptions` pd on p.product_id = pd.product_id
join `cscart_products_categories` pc on p.product_id = pc.product_id
where pd.product like '%CLONE%'
and pc.category_id = '17'; -- 17 is the current category_id

16 выбранных строк;

Затем я выполняю обновление:

UPDATE cscart_products_categories pc
join `cscart_product_descriptions` pd on pc.product_id = pd.product_id
join `cscart_products` p on pc.product_id = p.product_id
SET pc.category_id = '30'  -- the category to be moved to
WHERE pc.category_id = '17'
AND pd.product like '%[CLONE]%';

9 строк затронуты;

Как видите, только 9 из 16 обновляются, очевидно, что-то не так в моем обновлении, но что?

1 Ответ

1 голос
/ 08 сентября 2011

Ваш первый запрос находит 16 строк, которые имеют category_id = 17.

Ваш второй запрос изменяет 9 строк на HAD category_id 30 to now have category_id 17.

Таким образом, после второго запроса повторный запуск первого запроса должен обнаружить 16 + 9 = 25 записей с `category_id 17.

Если вы хотите узнать, сколько результатов будет обновлено, вы должны выполнить первый запрос с `category_id = 30:

select p.product_id, pd.product, pc.category_id
from cscart_products p
join `cscart_product_descriptions` pd on p.product_id = pd.product_id
join `cscart_products_categories` pc on p.product_id = pc.product_id
where pd.product like '%CLONE%'
and pc.category_id = '30'; -- the one that will be changed

- найдено 9 строк

UPDATE cscart_products_categories pc
join `cscart_product_descriptions` pd on pc.product_id = pd.product_id
join `cscart_products` p on pc.product_id = p.product_id
SET pc.category_id = '17'
WHERE pc.category_id = '30' -- the category to be moved to
AND pd.product like '%[CLONE]%';

- затронуто 9 строк

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