2015-06-05 2 views
1

Привет, ребята, новые для этого и нуждаются в указании в правильном направлении.Обновить таблицу с пустой колонкой с данными из другой таблицы, используя общий идентификатор из третьей таблицы

DB1 product_description [product_id, name, description] 

* DB1.product_description.product_id связан с category_id в отдельном product_to_category_id table. category_id in table1 == cat_id в DB2 .Inventory

DB1 product_description 

------------------------------------------------------ 
| product_id  | name   | description  | 
------------------------------------------------------- 
| 999   | product999 | description text | 
| 1000   | product1000 |     | 
| 1001   | product1001 |     | 
| 2000   | product2000 |     | 
------------------------------------------------------- 

Inventory DB2 [productId, name, description, cat_id]

DB2 
Inventory 
------------------------------------------------------------------ 
| productId  | name   | description  | cat_id | 
----------------------------------------------------------------- 
| 999   | product999 | description text | 236  | 
| 1000   | product1000 | description text2 | 237  | 
| 1001   | product1001 | description text3 | 237  | 
| 2000   | product2000 | description text4 | 456  | 
----------------------------------------------------------------- 


DB1 
product_to_category 
--------------------------------- 
| product_id  | category_id | 
--------------------------------- 
| 999   | 236   | 
| 1000   | 237   | 
| 1001   | 237   | 
| 2000   | 456   | 
--------------------------------- 

Я ищу, чтобы скопировать "описание" данные из DB2 и поместить его в «описание» в DB1, предпочтительно используя WHERE cat_id >=237 <=456

Я надеялся использовать идентификатор категории, потому что я могу перемещать продукты и вставлять метаданные одновременно. cat_id представляет собой набор продуктов, около 200 или с помощью ProductID, но мне нужно будет обновить другие поля отдельно

UPDATE DB1.product_description 
SET description = (SELECT description 
FROM DB2.Inventory 
WHERE `cat_id` =2616); 

это дает ошибку # 1064 - У вас ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'SET description = (SELECT description FROM DB2.Inventory WHERE cat_id =2616)' at line 2

удалил запятую благодаря клубнике;) теперь получите ошибку;

#1242 - Subquery returns more than 1 row 

У меня есть 30000 продуктов, перечисленных с описаниями, но необходимо интегрировать еще 2000 продуктов в базу данных, не нарушая продукты, которые имеют данные уже в поле описания.

Я пробовал различные сообщения на этом сайте перед публикацией, но не могу понять, как использовать cat_id для отдельной таблицы. Или даже если это возможно. Если бы кто-то был достаточно любезен, чтобы указать, куда я иду, я был бы благодарен. Я провел последние три дня, пытаясь получить описание поля заполнены, но без радости после просмотра тонны сообщений на форуме

Еще раз спасибо

HTT

+0

Возможный дубликат [MySQL - запрос UPDATE на основе запроса SELECT] (http://stackoverflow.com/questions/1262786/mysql-update-query-based-on-select-query) –

+0

Что такое запятая? – Strawberry

+0

Привет, Джей Спасибо за ваш быстрый ответ. Я просмотрел ссылку выше, прежде чем отправлять сообщения, но я не мог справиться с cat_id. это потому, что я не связал cat_id с category_id. Я попытался использовать productId для WHERE productId = product_id, но получил ошибку первичного ключа – HoldThatThought

ответ

0

Пожалуйста, попробуйте следующее на тестовой среде:

UPDATE 
    DB1.product_description 
    INNER JOIN DB2.Inventory 
    ON DB2.Inventory.productId = DB1.product_description.product_id 
SET 
    DB1.product_description.description = DB2.Inventory.description 
WHERE 
    DB2.Inventory.cat_id = 2616; 

/* 
    or for the range of records: 
    WHERE (DB2.Inventory.cat_id >= 237 AND DB2.Inventory.cat_id <= 456) 
*/ 

Я думаю, что мистер @ Джей Бланшар указал в правильном направлении.

Надеюсь, это поможет хотя бы немного.

+0

Привет, T_G Он работал, спасибо вам большое :) Я уверен, что Джей указал мне в правильном направлении, но мне действительно нужно было больше ходить и ваш код был идеальным. Я тестировал его в каталоге 2616, так как это была небольшая коллекция, но также сможет использовать измененный код для диапазона.Было очень мило, что вы нашли время, чтобы помочь. Вы знаете, как меня это усилило. Еще раз спасибо T_G;) – HoldThatThought

+0

Нет проблем. Я рад помочь тогда :) –