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

有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
.
.
.

不知道为什么要这样做,有疑问:
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);

追问

您好!下面这两种写法有语法错误,我不知道错在哪里,麻烦您帮忙看下。非常感谢。
1、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)
)

追答

你是什么数据库啊?

追问

sql

追答

我写的是Oracle数据库
你根据我写的改成SQL Server就行了啊
就是那个思路
对SQL SERVER 不是很熟,你这样试一下
insert into c (ID , 发货单号,日期,价格,存货名称, 数量,运费结算,状态)
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
UPDATE D SET UPDATE_ID=(SELECT MAX(ID) FROM A,B WHERE A.ID=B.ID)
FROM D;

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-06-30
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
第2个回答  2012-06-30
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

你试试

多表联合查询sql语句
1. INNER JOIN:这是最常用的联合查询方式。它只返回两个表中都有匹配记录的行。语法如下:sql SELECT 列名称 FROM 表1 INNER JOIN 表2 ON 表1.列名称 = 表2.列名称;这里的“ON”关键字后面跟的是关联两个表的条件。2. LEFT JOIN:左连接返回左表中的所有记录和右表中匹配的记录...

多表联合查询SQL语句
在SQL编程中,当我们需要从多个相关的数据表中获取信息时,可以使用多表联合查询语句来实现数据的整合。这个特定的SQL查询示例,其核心思想是通过JOIN操作将表a、b和c中的数据关联起来。查询的目的是获取表a中编号为c.no的记录,以及与之相关联的表b中子ID为c.subid的数据,同时还会获取表c中的score...

求助,怎样将两张表的数据合并到一张新表中的sql语句
SQL UNION ALL 语法 SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2 另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

MySQL双表联查实现多张数据表联合查询mysql两边联查
在MySQL数据库中,使用关键字JOIN和ON可以实现两个数据表的联合查询。具体来说,我们可以将表的名称作为JOIN关键字的参数,然后使用ON关键字来指定两个数据表之间的连接条件。下面是使用双表联查查询数据的SQL语句:SELECT table1.name, table2.age FROM table1 JOIN table2 ON table1.id = table2....

在SQL语句中如何查询两个表的信息插入到一个表中,
可以通过以下sql实现 sql:insert into tablename1(filename3,filename4) as select t2.filename1, t3.filename2 from tablename2 t2,tablename3 t3 where t2.id =t3.id;解释:从tablename2表中读取出filename1字段,从tablename3表中读取出filename2字段插入到tablename1表中的file...

SQL数据库如何实现联合查询?谢谢!(sql语句联合查询)
第一:内联(innerjoin)如果想把用户信息,积分,等级都列出来.那么一般会这样写 select*fromt1,t3wheret1.userid=t3.userid其实这样的结果等同于select*fromt1innerjoint3ont1.userid=t3.userid 就是把两个表中都存在userid的行拼成一行.这是内联.但后者的效率会比前者高很多.建议用后者的写法.运行...

求教oracle两个表联合查询的sql语句
1、上面的sql是按照成绩降序排列后取出每个姓名的第一条记录,如果想换成升序把【order by b.成绩 desc】改成【order by b.成绩】即可。2、如果想取第二条记录把【where id = 1;】改成【where id = 2;】即可。3、如果想去前n条把【where id = 1;】改成【where id <=n;】即可。--- ...

两表关联查询SQL语句的,要怎么写?
1、创建测试表;create table company(companyId number, companyName varchar2(20), contacts varchar2(20));create table users(userId number, companyId number, userName varchar2(20), userAge number, address varchar2(20));2、插入测试数据;insert into company values (1,'腾讯科技','...

sql语句怎么把两个表合一起?
1、首先在桌面上,点击“Management Studio”图标。2、之后在该界面中,点击左上角“新建查询”选项。3、接着在该界面中,输入将两个表合在一起的sql语句“select * from test1,test2;”。4、然后在该界面中,点击工具栏里的“运行三角形”图标。5、最后在该界面中,显示成功将两个表合在一起。

如何用SQL语句的查询实现两个表之间的查询连接
一、用连接查询:SELECT * FROM Student INNER JOIN Score ON Cno=2 AND Grade>=90 二、用子查询:SELECT * FROM Student WHERE Sno IN(SELECT Sno FROM Score WHERE Cno=2 AND Grade>90)

相似回答