I have two very similar SQL statements. On of them work and on not. The SQL error message seems to be misleading. Can you figure it out?
SQL 1 -- this works just fine
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 -- this fails
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 runs fine. SQL2 messages:
Columns referenced in the ON Clause cannot be updated: string Cause: LHS of UPDATE SET contains the columns referenced in the ON Clause
On the other side I reference the on-clause "datasource", in both SQLs, so the error message cannot be full truth.
It seems like the problem is that one time I only check for null value entries. But why does this affect the SQL logic?
Many greetings, Peter