У меня есть два очень похожих оператора SQL.На них работают, а на нет.Сообщение об ошибке SQL, кажется, вводит в заблуждение.Можете ли вы понять это?
SQL 1 - это прекрасно работает
Merge into t1
Using (
Select art_ref_nr, channel, some_value From s1 ) t2
On ( t1.art_ref_nr = t2.art_ref_nr and t1.channel = t2.channel
and ( t1.datasource is null
or (t1.datasource = 'no such value' ) -- only null values will be found
))
WHEN MATCHED THEN UPDATE SET
t1.some_value = t2.some_value
, t1.datasource = 'value 1'
;
SQL 2 - это не удается
Merge into t1
Using (
Select art_ref_nr, channel, some_value From s1 ) t2
On ( t1.art_ref_nr = t2.art_ref_nr and t1.channel = t2.channel
and ( t1.datasource is null
))
WHEN MATCHED THEN UPDATE SET
t1.some_value = t2.some_value
, t1.datasource = 'value 2'
;
SQL1 работает нормально.Сообщения SQL2:
Невозможно обновить столбцы, указанные в предложении ON: строка Причина: LHS в UPDATE SET содержит столбцы, указанные в предложении ON
С другой стороныЯ ссылаюсь на условие «источник данных» в обоих SQL, поэтому сообщение об ошибке не может быть полной правдой.
Кажется, проблема в том, что один раз я проверяю только записи с нулевыми значениями.Но почему это влияет на логику SQL?
Много приветствий, Питер