题目需求很简单。
2个表:aa、bb 【为简单起见,设2张表中的所有字段均为number类型】aa:主键、状态
bb:主键、卡号、状态
bb中的主键对应于aa中的主键数据如下:
SQL> select * from aa;
ID STATUS
---------- ----------
1 111
2 222
3 7
SQL> select * from bb;
ID CARD STATUS
---------- ---------- ----------
1 1000 123
2 1001 124
3 1002 7题目:
当卡号为1002时,将表aa和bb中的对应的status字段修改为888,即:
SQL> select * from aa;
ID STATUS
---------- ----------
1 111
2 222
3 888SQL> select * from bb;
ID CARD STATUS
---------- ---------- ----------
1 1000 123
2 1001 124
3 1002 888提供测试数据:
insert into aa values(1,111);
insert into aa values(2,222);
insert into aa values(3,7);insert into bb values(1,1000,123);
insert into bb values(2,1001,124);
insert into bb values(3,1002,7);PS:想问一下,下面的update语句为何更新了3行【前两行成空了】,而不是1行呢?
SQL> update aa set status=(select 888 from bb where aa.id=bb.id and bb.card=1002);
3 rows updated
SQL> select * from aa;
ID STATUS
---------- ----------
1
2
3 888
2个表:aa、bb 【为简单起见,设2张表中的所有字段均为number类型】aa:主键、状态
bb:主键、卡号、状态
bb中的主键对应于aa中的主键数据如下:
SQL> select * from aa;
ID STATUS
---------- ----------
1 111
2 222
3 7
SQL> select * from bb;
ID CARD STATUS
---------- ---------- ----------
1 1000 123
2 1001 124
3 1002 7题目:
当卡号为1002时,将表aa和bb中的对应的status字段修改为888,即:
SQL> select * from aa;
ID STATUS
---------- ----------
1 111
2 222
3 888SQL> select * from bb;
ID CARD STATUS
---------- ---------- ----------
1 1000 123
2 1001 124
3 1002 888提供测试数据:
insert into aa values(1,111);
insert into aa values(2,222);
insert into aa values(3,7);insert into bb values(1,1000,123);
insert into bb values(2,1001,124);
insert into bb values(3,1002,7);PS:想问一下,下面的update语句为何更新了3行【前两行成空了】,而不是1行呢?
SQL> update aa set status=(select 888 from bb where aa.id=bb.id and bb.card=1002);
3 rows updated
SQL> select * from aa;
ID STATUS
---------- ----------
1
2
3 888
解决方案 »
- ant脚本运行sql出错,但是sql语句没有任何问题
- mysql的timestamp类型转oracle的date类型使用后报错
- Oracle数据库和SQL Server 数据库互连实现两边数据同步变化。
- sql语句请教 ,含有变量的,见例子(正文)
- 存储过程 :提示错误:行号=1 列号=30 错误文本=PLS-00103出现”create"在需要下列之一时: (; is with authid as cluster
- 一个关于IMP命令的问题,很急,在线等!!!!!
- 简单问题:关于数据库的连接
- 怎样让 SQL Plus 在select * from table 时将该表所有的字段名完整的显示出来?
- 急急急!!!安装Oracle9i Client 问题?
- 大神求帮忙,,不熟悉oracle概念
- 求一个插入数据的方案
- Procedure 中的EXCEPTION
你看一下你的update语句:
【update aa set status=(select 888 from bb where aa.id=bb.id and bb.card=1002);】
没有任何where条件限制,自然是全表更新,因为前两条记录在【bb.card=1002】的时候【aa.id≠bb.id】,所以关联子查询没有结果返回就是【NULL】,前两条记录既然就被更新了。
update aa set status=(select 888 from bb where aa.id=bb.id and bb.card=1002)
where car=1002
where car=1002
建议回帖的哥们自己试下再发上来 - -0 送佛送到西嘛
where id=(select id from bb where bb.card=1002)试试
2 bb列只有一个card为1002的 所以改了一个 “正确”的 其它没找到 自然也就是空了
7楼中的语句运行后没有改变变量,即便是我将status改成888。很遗憾的是,各位写的语句都是错误的。可能是我的ps中的语句误导了大家。
希望大家能理解题目的要求:改变2张表中status,而不是一张。
mysql中的update可以同时更新两张表!