现在有 A表(ID,POSITORY_ID,NO,,NAME,DATE),B表(ID,SUBSCRIBER_ID,.....)
我想链接A B 两表,通过ID,知道的条件是 SUBSCRIBER_ID,最后要修改A表的POSITORY_IDselect *
from A a ,B b
where a.id = b.id
and b.subscriber_id in (..........)
更新的时候不知道该怎么写,目的是 UPDATE A set a.pository_id = 782137621另外我备份表的时候 CREATE TABLE TEMP_A_20110811
as
select * from ......
估计两个表有一样的字段把。
时,提示有重复的字段。
解决方案 »
- oracle数据库startup的时候没有错误代码,但是打开表的时候提示ora00376无法读取文件2,急求解决
- oracle在客户端备份和服务器端备份的一个相关问题.
- 可以实现把两个用户的表用 join 连接起来么 ??? 好像巨难 ...>>
- sql 中如何调用Oracle的存储过程
- ORACLE 数据库登录出错-“灾难性故障”
- oracle数学统计包的名称
- 不小心删除表空间!!!!!!
- 用什么方法可以对比两个记录本应该相同数据表,找出不同的记录,并把这些记录显示出来。(急)
- 如何把一张表中的两个字段的数据加上表名倒入到另外一张表中?SQL语句如何写?
- 这个SQL语句可以怎么优化,救急
- 2个select放进另一个select中能否实现
- PL SQL生成测试数据的问题
--merge into
MERGE INTO A
USING (SELECT * FROM B WHERE B.SUBSCRIBER_ID IN (..........)) B
ON (A.ID = B.ID)
WHEN MATCHED THEN
UPDATE SET A.POSITORY_ID = 782137621;--普通update
UPDATE A
SET A.POSITORY_ID = 782137621
WHERE EXISTS (SELECT 1
FROM B B
WHERE A.ID = B.ID
AND B.SUBSCRIBER_ID IN (..........));
创建表 a_test
id pository_id
1 123123123
3 113212312
4 123123
6 12312312
表 b_test
id subscriber_id
1 1111
2 2222
3 3333
4 4444
5 5555
UPDATE a_test a
SET A.POSITORY_ID = 782137621
WHERE EXISTS (SELECT 1
FROM b_test B,a_test A
WHERE A.ID = B.ID
AND B.SUBSCRIBER_ID IN (2222,3333,4444));
执行子查询select 1....,返回
1
1
这个应该是匹配的第3行,第4行执行整个 update.查询表a_test 发现pository_id 全部变成了782137621
不理解了。
--请注意看下我的回复。
UPDATE A
SET A.POSITORY_ID = 782137621
WHERE EXISTS (SELECT 1
FROM B B --这里我只有一个表,第二个B只是表的别名。
WHERE A.ID = B.ID
AND B.SUBSCRIBER_ID IN (..........));--而你的写法
UPDATE a_test a
SET A.POSITORY_ID = 782137621
WHERE EXISTS (SELECT 1
FROM b_test B,a_test A --这里有俩表 改成【b_test B】去掉后后面的【,a_test A】
WHERE A.ID = B.ID
AND B.SUBSCRIBER_ID IN (2222,3333,4444));
SET A.POSITORY_ID = 782137621
WHERE EXISTS (SELECT 1
FROM b_test B --这里我只有一个表,第二个B只是表的别名。
WHERE a_test.ID = B.ID
AND B.SUBSCRIBER_ID IN (2222,3333,4444));一开始我也是用你的方法,执行以后提示:
ORA-00904:"A_TEST","ID": invalid identifier
然后才加了个表A的。
[TEST@myorcl] SQL>select * from a_test; ID POSITORY_ID
---------- -----------
1 123123123
3 113212312
4 123123
6 12312312[TEST@myorcl] SQL>select * from b_test; ID SUBSCRIBER_ID
---------- -------------
1 1111
2 2222
3 3333
4 4444
5 5555[TEST@myorcl] SQL>UPDATE A_TEST
2 SET POSITORY_ID = 782137621
3 WHERE EXISTS (SELECT 1
4 FROM B_TEST B --这里我只有一个表,第二个B只是表的别名。
5 WHERE A_TEST.ID = B.ID
6 AND B.SUBSCRIBER_ID IN (2222, 3333, 4444));已更新2行。[TEST@myorcl] SQL>select * from a_test; ID POSITORY_ID
---------- -----------
1 123123123
3 782137621
4 782137621
6 12312312[TEST@myorcl] SQL>
UPDATE 后面的表是不能跟别名的