1.
MERGE tbl AS target
USING tb2 AS source
ON (target.id = source.id)
WHEN MATCHED and source.price >450
then
UPDATE SET TARGET.price = SOURCE.price,
TARGET.group = SOURCE.group
2.
update tb1
set
tb1.price=tb2.price,
tb1.group=tb2.group from tb2
left join tb1 on tb1.id =tb2.id
where tb1.id =tb2.id
and tb1.price>450
我对上述两种代码感到困惑。在第二个代码集上,当我在tb1.id=tb2.id
过滤器之后不使用where
时,当id
与select
语句不匹配时,我会得到大量空值。 merge
似乎很好,但不能正确理解它是如何工作的
我想知道这两组代码是否相同?第一组代码中的on tb1.id=tb2.id
首先表现得像过滤器吗?如果我在第二组代码之后省略tb1.id=tb2.id
会发生什么。我很困惑,使用这个select
和update
语句,join语句使用select生成空值,但使用update时会发生什么?什么时候我想要更新一些表格,我想看看哪些表格会受到影响,有时候我会对这些空白感到困惑.....我没有任何正式的培训,只是在网上寻找并尝试学习但似乎也是要考虑很多事情。
见过this one我也不清楚。
没有。两个表上的行不相同,tb1大于tbl2。
答案 0 :(得分:1)
第二个语句中的问题是LEFT连接。 LEFT OUTER JOIN的缩写 - 即对于tb1中tb2中没有匹配的任何行,“匹配”tb2值将为null。
相当于合并的更新的正确形式是:
update tb1 set
price = source.price,
group = source.group
from tb2 as source
join tb1 as target
on (target.id = source.id)
where source.price > 450;