今天遇到一个很简单的问题,但是一直没太想明白。
问题:
通过查询B表的结果更新A表对应内容
匹配条件: ID_A = ID_B, TIME_B = 3
更新内容: VALUE_B 赋值给 VALUE_A表A
ID_A | TIME_A | VALUE_A
-----|--------|---------
1 |1 |1
2 |1 |2表B
ID_B | TIME_B | VALUE_B
-----|--------|---------
1 |1 |1
2 |1 |2
1 |2 |3
2 |2 |4
1 |3 |5
2 |3 |6更新结果
ID_A | TIME_A | VALUE_A
-----|--------|---------
1 |1 |5
2 |1 |6注:只利用SQL语句,不用存储过程。
请各位大神指点,并说明原理。多谢~~
问题:
通过查询B表的结果更新A表对应内容
匹配条件: ID_A = ID_B, TIME_B = 3
更新内容: VALUE_B 赋值给 VALUE_A表A
ID_A | TIME_A | VALUE_A
-----|--------|---------
1 |1 |1
2 |1 |2表B
ID_B | TIME_B | VALUE_B
-----|--------|---------
1 |1 |1
2 |1 |2
1 |2 |3
2 |2 |4
1 |3 |5
2 |3 |6更新结果
ID_A | TIME_A | VALUE_A
-----|--------|---------
1 |1 |5
2 |1 |6注:只利用SQL语句,不用存储过程。
请各位大神指点,并说明原理。多谢~~
SET a.value_a=b.value_b
FROM a INNER JOIN b ON a.id_a=b.id_b
WHERE time_b=3
from b
where a.id_a=b.id_b and b.time_b=3
当满足条件a.id_a=b.id_b and b.time_b=3时更新set value_a=b.value_b
UPDATE A
SET A.VALUE_A = (
SELECT B.VALUE_B
FROM B
WHERE A.ID_A = B.ID_B AND B.TIME_B = 3
)
FROM B
WHERE A.ID_A = B.ID_B
AND B.TIME_B = 3
因为你括号里面的这句,刚好只返回了一行,如果是多行,就会报错,所以用我那句会比较稳当,我那句不用考虑是一行还是多行。
FROM B
WHERE A.ID_A = B.ID_B
AND B.TIME_B = 3
不也是返回多行吗?
SELECT B.VALUE_B FROM B WHERE A.ID_A = B.ID_B
AND B.TIME_B = 3 其实它和a表关联了,这样本来就进一步限定了数据,但是这种写法仅限于特殊数据,如果time_b=3还有多条,那么你那个update是会报错的。不信你可以再加一条数据进去