merge sql condition is null 问题
merge sql condition is null issue
我有两个非常相似的 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 条消息:
Columns referenced in the ON Clause cannot be updated: string Cause:
LHS of UPDATE SET contains the columns referenced in the ON Clause
另一方面,我在两个 SQL 中都引用了 on-clause "datasource",因此错误消息不可能是完全真实的。
问题似乎是有一次我只检查空值条目。但是为什么这会影响 SQL 逻辑?
许多问候,
彼得
我猜你的第一个查询不会产生错误,因为从未找到匹配的行。
对于第二个查询,它必须执行 UPDATE,但不能,因为您将要 UPDATE 的列引用到 ON 子句中。
为了克服这个问题,尝试进入 WHERE 子句,ON 子句中引用您尝试更新的列的部分:
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)
WHEN MATCHED THEN UPDATE SET
t1.some_value = t2.some_value
, t1.datasource = 'value 2'
WHERE t1.datasource is null
;
我有两个非常相似的 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 条消息:
Columns referenced in the ON Clause cannot be updated: string Cause: LHS of UPDATE SET contains the columns referenced in the ON Clause
另一方面,我在两个 SQL 中都引用了 on-clause "datasource",因此错误消息不可能是完全真实的。
问题似乎是有一次我只检查空值条目。但是为什么这会影响 SQL 逻辑?
许多问候, 彼得
我猜你的第一个查询不会产生错误,因为从未找到匹配的行。
对于第二个查询,它必须执行 UPDATE,但不能,因为您将要 UPDATE 的列引用到 ON 子句中。
为了克服这个问题,尝试进入 WHERE 子句,ON 子句中引用您尝试更新的列的部分:
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)
WHEN MATCHED THEN UPDATE SET
t1.some_value = t2.some_value
, t1.datasource = 'value 2'
WHERE t1.datasource is null
;