1、例如:有两个表a(字段1,字段2,字段3)、b(字段2,字段3),其中存储数据如下所示
表a
字段1 | 字段2 | 字段3 |
1 | <null> | 地段内容1 |
1 | <null> | 地段内容1 |
2 | <null> | 地段内容2 |
2 | <null> |
地段内容2 |
3 | <null> | 地段内容3 |
4 | <null> | 地段内容4 |
5 | <null> | 地段内容5 |
5 | <null> | 地段内容5 |
5 | <null> | 地段内容5 |
6 | <null> | 地段内容6 |
7 | <null> | 地段内容7 |
8 | <null> | 地段内容8 |
8 | <null> | 地段内容8 |
8 | <null> | 地段内容8 |
8 | <null> | 地段内容8 |
表b
字段2 | 字段3 |
wdz1 | 地段内容1 |
wdz2 | 地段内容3 |
wdz3 | 地段内容5 |
wdz4 | 地段内容6 |
wdz5 | 地段内容7 |
wdz6 | 地段内容8 |
使用下面的sql语句(可以达到将表a中字段3与表b中字段3相同的数据字段2填充到表a中的字段2)
update 表1 set 字段1 = (select 字段1 from 表2 where 表1.字段3=表2.字段3)
结果如下表所示
表a结果
字段1 | 字段2 | 字段3 |
1 | wdz1 | 地段内容1 |
1 | wdz1 | 地段内容1 |
2 | <null> | 地段内容2 |
2 | <null> |
地段内容2 |
3 | wdz2 | 地段内容3 |
4 | <null> | 地段内容4 |
5 | wdz3 | 地段内容5 |
5 | wdz3 | 地段内容5 |
5 | wdz3 | 地段内容5 |
6 | wdz4 | 地段内容6 |
7 | wdz5 | 地段内容7 |
8 | wdz6 | 地段内容8 |
8 | wdz6 | 地段内容8 |
8 | wdz6 | 地段内容8 |
8 | wdz6 | 地段内容8 |
下面是本条sql语句的网友意见
一、“江千帆”
update 表1 set 字段1 = (select 字段1 from 表2 where 表1.字段3=表2.字段3)
的效率很低,如果有x条记录,会导致子查询执行x次.
如果我们这样写,就可以充分利用索引(如果两表在字段3上面都建立了索引),并且避免不必要的多次执行。
update 表1 set 表1.字段2 =表2.字段2 from 表1 inner join 表2 on 表1.字段3=表2.字段3
网友意见归纳结束。
2、例如:如第1点中的表a相同,需要查询出表a的重复数据的sql语句如下
select 字段1 from 表a group by 字段1 having count(字段3) > 1
查询结果如下
表a查询结果
字段1 |
1 |
2 |
5 |
8 |
3、例如:需要在sql server2000中查询处某固定物理路径的x1.dbf文件,使用的sql语句如下(必须先安装vf驱动才能使用此sql语句)
select * from opendatasource(‘vfpoledb.1′,’user id=;dsn=;collating sequence=machine;data source=c:\dbffiles\x1.dbf;password=;cache authentication=false;mask password=false;mode=share deny none;extended properties=;encrypt password=false’)…x1
注:其他的非vf数据库文件的查询类似,只需要设置opendatasource中的参数即可。参数说明为opendatasource(数据源驱动名,数据源连接字符串)