日期:2014-05-19  浏览次数:20506 次

求一个SQL语句,分不够,以后一定补,非常感谢,很急!
a表:
xno   箱号   ,id   货号   ,sl   数量
1,a001,2
1,a002,3
3,a001,2
4,a008,9

b表:
xno   箱号   ,id   货号   ,sl   数量
1,a001,3
1,a002,4
3,a001,2
5,a001,6


求:   a.xno,a.id,a.sl,b.xno,b.id,b.sl

1,a001,2,1,a001,3
1,a002,3,1,a002,4
3.a001,2,3.a001,2
4,a008,9,null,null,null
null,null,null,5,a001,6

------解决方案--------------------
select a.xno,a.id,a.sl from a left join b on a.xno=b.xno

其他的join如下例:
例表a
aid adate
1 a1
2 a2
3 a3
表b
bid bdate
1 b1
2 b2
4 b4
两个表a,b相连接,要取出id相同的字段
select * from a inner join b on a.aid = b.bid这是仅取出匹配的数据.
此时的取出的是:
1 a1 b1
2 a2 b2
那么left join 指:
select * from a left join b on a.aid = b.bid
首先取出a表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
1 a1 b1
2 a2 b2
3 a3 空字符
同样的也有right join
指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
1 a1 b1
2 a2 b2
4 空字符 b4

------解决方案--------------------
select a.xno,a.id,a.sl,b.xno,b.id,b.sl
from a full join b on a.xno=b.xno and a.id=b.id
order by isnull(a.xno,999999999),b.xno
------解决方案--------------------
left join 可以完成你的功能,没有问题的,你好好看看。
------解决方案--------------------
--用 FULL JOIN

create table A
(
xno int,
id varchar(10),
sl int
)

insert A select 1, 'a001 ',2
insert A select 1, 'a002 ',3
insert A select 3, 'a001 ',2
insert A select 4, 'a008 ',9

create table B
(
xno int,
id varchar(10),
sl int
)

insert B select 1, 'a001 ',2
insert B select 1, 'a002 ',4
insert B select 3, 'a001 ',2
insert B select 5, 'a001 ',6

select A.*,B.*
from A FULL JOIN B
on A.xno=B.xno and A.id=B.id
------解决方案--------------------
order by isnull(a.xno,b.xno)--排序还可以改成这样