2015-03-27 2 views
0

У меня есть две базы данных, test1 и test2. test1 имеет следующее table1.Обновить (заполнить) SQL столбец таблицы с данными из другой таблицы базы данных

ID | Word  | Def 
1. abandon  NULL 
2. test  NULL 

И test2 базы данных У меня есть следующие table2.

ID | Word  | Def 
1. abandon  (verb) the meaning of abandon 
2. word2  the meaning of word2 
3. abandon  (noun) the meaning of abandon 

Я хочу скопировать определение слов из базы данных test2, table2 в базу данных test1, table1 где слово из table1 совпадает с тем же словом из table2 и избежать дублирования слова; например, слово abandon появляется дважды в table2 и только один раз в table1. Если возможно, я хочу добавить второе определение слова abandon, добавленное к первому определению, и обновить его в столбце table1, Def.

Я пробовал следующее.

UPDATE test1.table1 
SET Def = (SELECT Def 
      FROM test2.table2 
      WHERE test1.table1.Word = test2.table2.Word); 

Но я получаю сообщение об ошибке, которое я не совсем понимаю.

+1

Какая ошибка? –

+1

Какую базу вы используете? Пожалуйста, отметьте вопрос соответствующим образом. –

ответ

2

Вам нужно получить только одно определение. Вот это подход, который работает в MySQL и Postgres:

UPDATE test1.table1 t1 
    SET Def = (SELECT Def 
       FROM test2.table2 t2 
       WHERE t1.Word = t2.Word 
       ORDER BY id 
       LIMIT 1); 

LIMIT 1 может быть альтернативно select top 1 или fetch first 1 row only.

+0

Спасибо. Отлично работает! – Zip

+0

Не могли бы вы объяснить, что происходит во втором запросе? Он работает как цикл while и обновляет t1, пока он больше не найдет t1.Word = t2.Word? Мое знание sql довольно ограничено. – Zip

+0

Это коррелированный подзапрос. Он генерирует все совпадающие строки в соответствии с предложением 'where', затем применяет' order by' и 'limit' для получения одного из них. –