Я делаю обновление для временной таблицы в Oracle.Я думал, что я мог бы использовать NVL, чтобы установить значение (по существу, делая нулевое значение с обеих сторон равным)
Что происходит в обновлении, так это то, что если число сравнений остается в силе, то столбец не обновляется,один из этих сравниваемых столбцов может быть нулевым, а Oracle не сравнивает нулевые значения.
Код может облегчить понимание.
UPDATE Temp_Table A Set T.ColZ = 'something'
WHERE NOT EXISTS
( SELECT * FROM Temp_Table B
WHERE A.ColF = B.ColF
AND ...more column comparisons
AND ((NVL(A.ColC, 'N/A') = NVL(B.ColC, 'N/A'))
AND more column Comparisons)
);
Обновление работает, когда ColC не содержит пустых значений, но когдаУ меня есть строка, что ColC равен Null, тогда он обновляется, несмотря на то, что он одинаков для обеих сторон.
Я также пытался использовать подзапрос в предложении where, но безуспешно.Будет ли подзапрос лучшим методом для использования здесь?
Любая помощь или советы приветствуются.
Просто хочу добавить, что в идеале я бы хотел вообще пропустить сравнение, если этот столбец равен нулюпоэтому любые идеи о том, как это сделать, приветствуются.Спасибо
A за каждый запрос Ypers пример с несколькими строками ... надеюсь, это достаточно ясно
Temp_Table
Col1 | Col2 | Col3 | Col4 |Col5 |Col6
AB | DC | EF | GH | 08 |
BA | CD | EF | GH | 08 |
AB | DC | HI | NULL| 05 |
AB | DC | JK | LM | 04 |
В приведенной выше строке 1 строка соответствует строке 2. Мое обновление должновыделите строки, такие как 3 и 4, где нет соответствующей строки.Я могу заставить это работать, когда Col4 не является Нулевым, но это терпит неудачу, когда это значение НульПросто FYi в temp_table для любого Col2, имеющего значение DC Col1, будет иметь значение AB в качестве значения, а для любого значения CD в Col2 тогда Col1 будет иметь значение BA.
UPDATE Temp_Table T SET Col6 = 'Unmatched'
WHERE NOT EXISTS
( SELECT * FROM Temp_Table B
WHERE T.Col3 = B.Col3
AND T.COl4 = B.Col4
AND T.COl5 = B.Col5 )
Надеюсь, что это помогает и спасибо.