2013-07-31 3 views
0

У меня есть две разные таблицы: Таблица 1 & Таблица2, каждая со своими наборами значений. Я хочу проверить столбец, чтобы увидеть, есть ли различия между собой и UPDATE Таблица1 соответственно. У меня есть этот запрос, который обновляет каждую строку независимо, если они отличаются по стоимости я проверка на:Проверка различий между двумя таблицами с разрешенными нулями в SQL

UPDATE Table1 
SET value = t2.value 
FROM Table1 t1 
INNER JOIN Table2 t2 
ON t1.ID = t2.ID 

Я попытался с помощью WHERE t1.value <> t2.value, но так как либо t1 и t2 может быть пустым, функция не работает должным образом. Я хочу запрос, который проверяет и обновляет только там, где их значения t1 и t2 отличаются.

+0

Так что, если одна сторона NULL, а другая сторона НЕ НЕЛЬЗЯ, я предполагаю, что вы хотите, чтобы они вернулись, верно? –

ответ

2
... 
WHERE t1.value <> t2.value 
OR (t1.value IS NULL AND t2.value IS NOT NULL) 
OR (t1.value IS NOT NULL AND t2.value IS NULL); 
1

Вы можете просто лавировать на where t1.id is not null and t2.ID is not null

например:

UPDATE Table1 
SET value = t2.value 
FROM Table1 t1 
INNER JOIN Table2 t2 
ON t1.ID = t2.ID 
WHERE t1.value <> t2.value 
AND t1.id is not null 
AND t2.ID is not null 
1

Если я правильно понял вопрос правильно, вы можете перечислить условия, при которых вы хотите сделать обновление в пункте where:

UPDATE Table1 
    SET value = t2.value 
    FROM Table1 t1 INNER JOIN 
     Table2 t2 
     ON t1.ID = t2.ID 
    WHERE (table1.value <> t2.value) or 
     (table1.value is null and table2.value is not null) or 
     (table1.value is not null and table2.value is null) 
0

Как насчет использования coalesce для предоставления значения по умолчанию y наши нули? Измените предложение where where.

WHERE COALESCE(t1.value,'') <> COALESCE(t2.value,'') 
Смежные вопросы