求sql语句, 联合两个表查询,建立一个新表,如何实现?

有A和B两个表,合并为一张新表AB(不要视图),并增加两个字段(运费结算和状态,并可以修改)。要求:修改A、B表时,AB表也自动更新。A表字段及记录如下:--------... 有A和B两个表,合并为一张新表AB(不要视图),并增加两个字段(运费结算和状态,并可以修改)。
要求:修改A、B表时,AB表也自动更新。
A表字段及记录如下:
---------------------------------------
ID 发货单号 日期 价格
309 P001 2012-6-1 100
.
.
.
B表字段及记录如下:
---------------------------------------
ID 存货名称 数量
309 铅笔 5
309 橡皮 9
.
.
.
合成后的AB表字段及记录应该如下:
-------------------------------------------------------------------------------
ID 发货单号 日期 价格 存货名称 数量 运费结算 状态
309 P001 2012-6-1 100 铅笔 5
309 P001 2012-6-1 100 橡皮 9
.
.
.
展开
 我来答
百度网友f2b7b2a
推荐于2017-12-16 · TA获得超过702个赞
知道小有建树答主
回答量:342
采纳率:100%
帮助的人:295万
展开全部
不知道为什么要这样做,有疑问:
1.既然是关系型数据库,为什么还要个合并AB表(假设称C表)的Table出现。
2.既然A,B表发生更改,C表也改变,又为何不要view来做?
3.增加的两个栏位 运费结算 状态 为何不直接不放在A表呢?

如果非得这样做的话,Oracle数据库,你可以
create table C as
( select a.ID, a.发货单号, a.日期, a.价格
b.存货名称,b. 数量,
null 运费结算,null 状态
from a,b
where a.id=b.id(+)
);
再将A,B对应写一个Trigger(触发器)来改变C表

总之,这种方式我怎么也想不通
更多追问追答
追问
你好,非常感谢您的回答。我这样做的目的有:
1、A、B表是我公司用友财务软件中的数据表。不可能直接在上面做修改。AB表是我打算另外开发小程序来用的。所以增加的两个字段:运费结算、状态不能直接放在A或B表上面。
2、如果用A、B表查询出来生成视图的话,不能修改视图。这样是行不通的。
3、只能通过新建一个合并表来完成。同时这个合并表必须和A、B表同步更新。
追答
合成后的AB表字段及记录应该如下:
-------------------------------------------------------------------------------
ID 发货单号 日期 价格 存货名称 数量 运费结算 状态
309 P001 2012-6-1 100 铅笔 5
309 P001 2012-6-1 100 橡皮 9
1.先创建好这个表,假设叫做表C
2.再新建一个表,假设为表D.表D就一个栏位,假设栏位为UPDATE_ID,初始设置一条记录,设置为0(用于储存更新到哪条ID)
每次更新表C的记录时,记录下ID.下次直接插入大于这个ID的记录就行了
那么
insert into c
(
select a.ID, a.发货单号, a.日期, a.价格
b.存货名称,b. 数量,null 运费结算,null 状态
from a,b
where a.id=b.id
and a.id>(select update_id from d) --获取上次更新的ID
);
这个时候你再记录此时更新的最大的ID的值,那么此次更新后,将表D记录也更新
UPDATE D SET UPDATE_ID=(SELECT MAX(ID) FROM A,B WHERE A.ID=B.ID);
szm341
2012-06-30 · TA获得超过6726个赞
知道大有可为答主
回答量:5005
采纳率:100%
帮助的人:5165万
展开全部
select A.ID,A.发货单号,A.日期,A.价格,B.存货名称,B.数量,0 as 运费结算,0 as 状态
into AB from A inner join B on A.ID=B.ID
根据你运费结算和状态的类型,可以定义成''空来代替0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lqiang0329
2012-06-30 · 超过31用户采纳过TA的回答
知道答主
回答量:110
采纳率:0%
帮助的人:83.2万
展开全部
create proc st_jsjbj
as
insert into AB select A.发货单号,A.日期,A.价格,B.存货名称,B.数量 from A inner join B on A.Id=B.id
go

alter table AB add 运费结算 varchar(20) null,状态 varchar(20) null
execute st_jsjbj

你试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式