日期:2014-05-18  浏览次数:20498 次

请问一条数据库查询该怎么写,多表的有点不熟。谢谢了。
表 进库 ID int,num int
表出库 ID int,进库ID,num int

表进库数据例如 1,500 2,500
表出库数据例如 1,1,300 1,1,200 1,2,300

此时的意思就是表a进库了500箱,1、2产品,卖掉了500箱1,300箱2,那么此时查询出来的数据即为库存中还剩下的b为200.

此时数据为 进库ID int,剩下的num

描述的不好,抱歉,在线刷新谢谢了。

------解决方案--------------------
/*
表 进库 ID int,num int
表出库 ID int,进库ID,num int

表进库数据例如 1,500 2,500
表出库数据例如 1,1,300 1,1,200 1,2,300

此时的意思就是表a进库了500箱,1、2产品,
卖掉了500箱1,300箱2,那么此时查询出来的数据即为库存中还剩下的b为200.

此时数据为 进库ID int,剩下的num

描述的不好,抱歉,在线刷新谢谢了。
*/

go
if OBJECT_ID('A')is not null
if OBJECT_ID('B')is not null
drop table A
drop table B
go
create table A(
ID int,
num int
)
go
insert A
select 1,500 union all
select 2,500
go
create table B(
ID int,
SaledId int,
num int
)
go
insert B
select 1,1,300 union all
select 1,1,200 union all
select 1,2,300

;with T
as
(
select ID,SaledId,SUM(num) as num from B
group by ID,SaledId
)

select T.ID,T.SaledId,A.num-T.num as num from T
inner join A on A.ID=T.SaledId

/*
ID SaledId num
1 1 0
1 2 200
*/

是这个意思么
------解决方案--------------------
SQL code

/*建表,插入测试数据*/
create table a(
    Id integer primary key not null,
    Num integer
);

insert into a (Id, Num) values (1, 500);
insert into a (Id, Num) values (2, 500);

create table b(
    Id integer primary key not null,
    aId integer,
    Num integer,
    foreign key(aId) references a(Id)
);

insert into b (Id, aId, Num) values (1, 1, 300);
insert into b (Id, aId, Num) values (2, 1, 200);  /*这里楼主写的依然是1,我理解为楼主写错了,按照表_出库的规则,应该这个Id为2*/
insert into b (Id, aId, Num) values (3, 2, 300);  /*同上*/

/*查询语句*/
select a.Id as Id, (a.Num - sum(b.Num)) as Num from a join b on a.Id = b.aId group by a.Id, a.Num

/*结果
Id     Num
1      0
2      200    
*/

------解决方案--------------------
我明白你的意思了就是两个表相减得出库存数据,你这样设计不太合理,应该再建一个库存表
进库时,库存表增加,出库时,库存表就减少。这样就好办了。你这样当然也能联合查询得到,就是不太合理

这样,以应对多次入库
select a.Id as Id, (sum(a.Num) - sum(b.Num)) as Num from a join b on a.Id = b.aId group by a.Id, a.Num