2013-08-21 6 views
0

Я не могу понять, как решить эту проблему. У меня есть таблица (A) необходимо обновлять, со структурой, например так:mysql cross-update table

CODE VALUE 
1  a 
2  null 
3  null 
etc... 

Тогда я иметь другую таблицу (B) с той же структурой, но с каждым набором значений:

CODE VALUE 
1  a 
2  b 
3  c 

Что мне нужно сделать, это скопировать данные из таблицы B в таблицу A, где A.CODE = B.CODE, но только если A.VALUE не установлен. Какой лучший запрос для этого? Не могу сделать это вручную, так как я имею дело с 2000ish строк.

я написал что-то вроде этого, но это не похоже на работу:

update A set VALUE = 
    (select b.VALUEfrom B b, A a where b.CODE = a.CODE) 

Спасибо заранее!

ответ

2
UPDATE a SET a.Value = b.Value 
FROM TableA a 
INNER JOIN TableB b ON (a.CODE = b.CODE) 
WHERE a.VALUE IS NULL 
+0

Я думаю, вы имеете в виду 'WHERE a.VALUE IS NULL' –

+0

Я так думаю. Я проверяю оба ответа, прежде чем принимать их. –

+0

@Ic - Хорошее место - мое плохое и исправленное. Я думаю, что разница между двумя ответами заключается в том, что соединение выше избегает подзапроса и должно быть более эффективным и более легким для чтения. Зависит от данных и тестирования курса. – bhs

1

Убедитесь, что a.value установлен сделать обновление, и только выбрать из таблицы B во внутреннем пункте (и использовать значение А из внешнего пункта):

update A 
    set VALUE = (select B.VALUE from B where B.CODE = A.CODE) 
    where VALUE IS NULL; 
+0

Это похоже работа. Но у меня другая проблема: некоторые строки просто пусты, и я не могу их заменить. Я попытался использовать 'где VALUE = ''', но это дает мне ошибку: subquery возвращает более одной строки. Я застрял здесь. –

+0

Я добавил «ограничение 1» внутри внутреннего предложения и решил проблему. Вероятно, дубликат? –