首先、这样的更新是可以被执行的,即,可以写出一个这个样update语句,但是实际执行过后,主记录究竟被更新为从记录的那个值,并不能明确确定。
退一步讲,即便在SQL Server相关语法及规则的规定的前提下可以确定主记录被从记录的那个值更新了,但是实际中也不要这样用,这样用,太艰涩,后续维护让人很难理解,再有也不能保证这样潜在隐含的语法规则将来会不会变掉,所以不要这样写。
DECLARE @a TABLE (
id INT
,id_value VARCHAR(100)
)
DECLARE @b TABLE (
id INT
,cur_value VARCHAR(100)
)
INSERT INTO @a(id)
SELECT 1
UNION
SELECT 2
INSERT INTO @b(id,cur_value)
SELECT 1,'jim'
UNION
SELECT 1,'tom'
UNION
SELECT 1,'lily'
UNION
SELECT 2,'max'
UNION
SELECT 2,'min'
SELECT *
FROM @a a
JOIN @b b
ON b.id = a.id
UPDATE a
SET id_value = b.cur_value
FROM @a a
JOIN @b b
ON b.id = a.id
SELECT *
FROM @a
====
id id_value id cur_value
1 NULL 1 jim
1 NULL 1 lily
1 NULL 1 tom
2 NULL 2 max
2 NULL 2 min
=======
id id_value
1 jim
2 max