【发布时间】:2019-04-15 12:08:39
【问题描述】:
我有两个非常相似的 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 子句中引用的列:字符串 原因: UPDATE SET 的 LHS 包含 ON 子句中引用的列
另一方面,我在两个 SQL 中都引用了 on 子句“数据源”,因此错误消息不能完全正确。
问题似乎是有一次我只检查空值条目。但是为什么这会影响 SQL 逻辑呢?
许多问候, 彼得
【问题讨论】:
-
它是一个预言机数据库