INSERT INTO简单谢谢

jiaxuesr 2005-11-19 02:13:46
有A,B二表,结构一样
A表有1000条数据
B表有1000条数据

要求把B表中数据,只要A表里面没有的,都要插过去,有则不往A表中插入,语句怎么写,谢谢

...全文
193 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
stephen_xl 2005-11-26
  • 打赏
  • 举报
回复
不好意思,上面的有笔误

--对于主键相同的已有数据则UPDATE
UPDATE A
SET ...
FROM B
WHERE EXISTS (
SELECT TOP 1 1
FROM A
WHERE A.主键=B.主键
)

--对于没有数据则INSERT
INSERT INTO A
SELECT *
FROM B
WHERE NOT EXISTS(
SELECT TOP 1 1
FROM A
WHERE A.主键=B.主键
)
stephen_xl 2005-11-26
  • 打赏
  • 举报
回复
--对于主键相同的已有数据则UPDATE
UPDATE A
SET ...
FROM AB
WHERE EXISTS (
SELECT TOP 1 1
FROM ASB
WHERE A.主键=B.主键
)

--对于没有数据则INSERT
INSERT INTO A
SELECT *
FROM B
WHERE NOT EXISTS(
SELECT TOP 1 1
FROM A
WHERE A.主键=B.主键
)
let5flying 2005-11-21
  • 打赏
  • 举报
回复
应该是根据主键不同来insert吧,全部一致的话好像没什么意义。
Alkeen 2005-11-21
  • 打赏
  • 举报
回复
有主键根据主键不同来insert,没有主键就用楼上得集合减。
hua830619 2005-11-20
  • 打赏
  • 举报
回复
可以利用集合运算,但是要注意表中的主键的完整性约束.
Insert into A
Select * From B
Minus Select * From A;
patrick1981 2005-11-20
  • 打赏
  • 举报
回复
呵呵,可以利用集合运算
insert into a
select * from b
minus select * from a
wuzhouhome 2005-11-19
  • 打赏
  • 举报
回复
insert into a
select * from b
where not exists(select 'aaa'
from test a
zzuheyong 2005-11-19
  • 打赏
  • 举报
回复
用not in也可以阿
baojianjun 2005-11-19
  • 打赏
  • 举报
回复
insert into table_a a
select * from table_b
where not exists (select 'x' from table_b c
where c.column_1 = a.column_1
and c.column_2 = a.column_2
....
and c.column_n = a.column_n)
hlp912 2005-11-19
  • 打赏
  • 举报
回复
insert into a
select * from b
where not exists(select 'aaa'
from test a
vc555 2005-11-19
  • 打赏
  • 举报
回复
看你是不是要求每行数据全部一致时才排除插入。比如testa中的134在test中也有,但对应第二个字段不同。
vc555 2005-11-19
  • 打赏
  • 举报
回复
把testa中数据,只要test里没有的,都要插过去,有则不往test中插入。
SQL> select * from test;

ACCOUNT_ID SERVICE_ID
-------------------------------- -----------
137 bbb
131 aaa
134 ccc
136 xxx
///////
SQL> select * from testa;

ACCOUNT_ID SERVICE_ID
---------- -----------
134
131 aaa
135 ddd
///////
SQL> insert into test
2 select * from testa a
3 where not exists(select 'aaa'
4 from test b
5 where b.account_id=a.account_id
6 and b.service_id=a.service_id);

已创建2行。
///////
SQL> select * from test;

ACCOUNT_ID SERVICE_ID
-------------------------------- -----------
137 bbb
131 aaa
134 ccc
136 xxx
134
135 ddd

已选择6行。
常遇道 2005-11-19
  • 打赏
  • 举报
回复
不如改一个表的名称就搞定了

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧