不对是什么意思?你少了AB两表的关联条件,比如update A set A.a=B.b from B where a.id=b.id and B.b='2014-06-02'
您要用B表的一个字段更新A表的一个字段吗 如果是这样的话,一般需要指明两个表的关联字段,如下是一个思路: update A set A.price = B.price from A inner join B on A.no=B.no where B.price = 20.5 说明:A,B两个表通过no关联,当B.price = 20.5 用B.price 更新对应的A.price
注意语气,你自己看看你的问题:为什么不对? 什么叫不对?数据不对?还是报错?说清楚啊update A set A.a=B.b from B where B.b='2014-06-02'你这是笛卡尔积啊,没关联就是笛卡尔积,知道么?
update A set A.a=B.b from B where B.b='2014-06-02'等价于: update A set A.a=B.b from a, B where B.b='2014-06-02' 那么你可以试一下: select a.*,b.*,a.a,b.b from a, B where B.b='2014-06-02' 其中a.a,b.b就是你将要更新后的数据。反复看了你的语句,你的语句还可以直接改为: update A set A.a='2014-06-02' 这是全表更新。
剛開始我也這樣認為,其實不然。 當B表中b字段有值等於'2014-06-02',才執行update A set A.a='2014-06-02'; 當B表中b字段沒有值等於'2014-06-02',什麼操作都沒有執行。 其實還是有條件的 update A set A.a='2014-06-02' where exists(select * from B where b='2014-06-02')
如果是这样的话,一般需要指明两个表的关联字段,如下是一个思路:
update A
set A.price = B.price
from A
inner join B on A.no=B.no where B.price = 20.5
说明:A,B两个表通过no关联,当B.price = 20.5 用B.price 更新对应的A.price
什么叫不对?数据不对?还是报错?说清楚啊update A set A.a=B.b from B where B.b='2014-06-02'你这是笛卡尔积啊,没关联就是笛卡尔积,知道么?
update A set A.a=B.b from a, B where B.b='2014-06-02'
那么你可以试一下:
select a.*,b.*,a.a,b.b
from a, B where B.b='2014-06-02'
其中a.a,b.b就是你将要更新后的数据。反复看了你的语句,你的语句还可以直接改为:
update A set A.a='2014-06-02'
这是全表更新。
當B表中b字段有值等於'2014-06-02',才執行update A set A.a='2014-06-02';
當B表中b字段沒有值等於'2014-06-02',什麼操作都沒有執行。
其實還是有條件的
update A set A.a='2014-06-02' where exists(select * from B where b='2014-06-02')