注册 登录
编程论坛 SQL Server论坛

这个查询怎么写?

shen521941 发布于 2007-11-24 09:56, 1528 次点击
这个查询怎么写?表a
   id    inID    out ID
    1    1         null
    2     2        1
表a_D
   id    inNum  inID
   1     I0001     1
   2     I0002     2

表b  
     id      OutID   
     1          1
表b_D
    id       OutNum  OutID
     1        O0001          1

我要得到的是
InNum   OutNum
I0001      null
I0001      O0001
18 回复
#2
shen5219412007-11-24 10:08
这个查询怎么写?
表a
   id    inID    out ID
    1    1         null
    2     2        1
表a_D
   id    inNum  inID
   1     I0001     1
   2     I0002     2

表b  
     id      OutID   
     1          1
表b_D
    id       OutNum  OutID
     1        O0001          1

我要得到的是
InNum   OutNum
I0001      null
I0002      O0001
#3
purana2007-11-24 10:13
没看懂..到底哪跟哪..你起码得说说吧.
#4
XieLi2007-11-24 10:14
我搞不懂表A,表B这两个表有什么用.
#5
shen5219412007-11-24 10:20
我只是想得到
我要得到的是
InNum   OutNum
I0001      null
I0002      O0001
这样的数据
我是把我手里的表抽出来了
看着确实没用
但是我要做的其实有8张表而且字段多
总部能全部列出来吧
只要能得到上边的数据就行了
关键是那个可以为null的字段
如果为null就只用到两个表了
不为null用刀4个表
#6
purana2007-11-24 10:21
create table a_D(
id int,
inNum varchar(10),
inID int
)

insert into a_D values(1,'I0001',1)
insert into a_D values(2,'I0002',2)

create table b_D(
id int,
outNum varchar(10),
outID int
)
insert into b_D values(1,'O0001',1)

select a.inNum,b.outNum
from a_D a left join b_D b
on a.id=b.id

drop table a_D,b_D

/*
inNum      outNum     
---------- ----------
I0001      O0001
I0002      NULL
(所影响的行数为 2 行)
*/

我是看不懂a,b表有什么用..
#7
shen5219412007-11-24 10:23
谢谢了
都忘左连接了:@
#8
shen5219412007-11-24 10:25
晕 没看见你只用了两个表
a  b两个表里还有其他字段
#9
shen5219412007-11-24 10:33
表 'AnotherOut' 是外联接子句的内部成员。如果该表同时也包含在常规联接子句中,那么这种情况是不允许的。
#10
purana2007-11-24 10:36
to 9楼.
没看懂..

我是只用了两个表..
因为我确实没看到你其它表在此查询中有什么作用..
#11
shen5219412007-11-24 10:55
表a
   id    inID    Out_ID   inName
    1    1         null          one
    2     2        1               two
表a_D
   id    inNum  inID
   1     I0001     1
   2     I0002     2

表b  
     b_id      OutID    OutName
     1          1           one
表b_D
    id       OutNum  b_id
     1        O0001          1

我要得到的是
InNum   OutNum    InName
I0001      null              one
I0002      O0001         two
#12
shen5219412007-11-24 10:55
这次应该明白了吧
#13
shen5219412007-11-24 10:56
刚刚是我表述不正确
#14
purana2007-11-24 11:28
不好意思..没看出有什么分别?..

create table a_D(
id int,
inNum varchar(10),
inID int
)

insert into a_D values(1,'I0001',1)
insert into a_D values(2,'I0002',2)

create table b_D(
id int,
outNum varchar(10),
outID int
)
insert into b_D values(1,'O0001',1)

create table a(
id int,
inID int,
out_ID int,
inName varchar(10)
)
insert into a values(1,1,null,'one')
insert into a values(2,2,1,'two')

select a.inNum,b.outNum,c.inName
from a_D a left join b_D b
on a.id=b.id
left join a c
on a.inID=c.inID

drop table a_D,b_D,a

/*
inNum      outNum     inName     
---------- ---------- ----------
I0001      O0001      one
I0002      NULL       two

(所影响的行数为 2 行)
*/
#15
XieLi2007-11-24 11:33
SELECT W.INNAME,W.OUTNUM,W.INNUM FROM (SELECT E.*,F.OUTNUM FROM (SELECT a.inname,a.out_id,b.innum from a left join a_d b on a.inid=b.inid)E LEFT JOIN

(SELECT C.OutID,D.OUTNUM FROM B C LEFT JOIN B_D D ON C.B_ID=D.B_ID) F ON E.OUT_ID=F.OutID) W
#16
shen5219412007-11-24 11:51
to版主,我id是自增的,你用的连接时用id 了,但是这里并不是用id关联的
a _ID 和b_ID 并不是通过id连接的
是通过InID和Out_ID连接的
我还没看xieli的 看下再回复
#17
orliubc2007-11-24 12:24
原帖由 shen521941 于 2007-11-24 10:25 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1112439&ptid=188021][/url]
晕 没看见你只用了两个表
a  b两个表里还有其他字段


TO 8楼

你要的结果是INNUM,OUTNUM,  A  B 两表中的字段不在你的查询目的之内,理它做甚?
A B 只是用于和A_D B_D级联时用的而已。
此查询中不需A B , 同意purana
:victory:
#18
shen5219412007-11-24 12:51
to 17楼
看我16楼的解释
#19
shen5219412007-11-24 15:39
谢谢 XieLi真的非常感谢
按照你的思路 我把它写出来了
select W.MTRIn_Num,W.AB_Remark,W.MTROut_Num
from (select E.AB_Remark,E.AO_ID,E.MTRIn_Num,F.MTROut_Num from
(select a.AB_Remark,a.AO_ID,b.MTRIn_Num from AnotherBack a left join MTR_In b on a.MTRIn_ID=b.MTRIn_ID) E
left join (select c.MTROut_Num ,d.AO_ID from MTROut c left join AnotherOut d on c.MTROut_ID=d.MTROut_ID ) F on E.AO_ID=F.AO_ID ) W
1