以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  这个SQL语句怎么写?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=104608)

--  作者:goldenfont
--  发布时间:2017/8/1 18:06:00
--  这个SQL语句怎么写?
主表:A

AID    Name
1      n1
2      n2
3      n3

从表:B
BID    Name   IfValid
1        n11        True
1        n12        False
2        n21        True

我想组合sql语句显示出来主表的每一条记录,对应从表中若有True数据,则只显示True的从表数据,没有就空在那里,我写了:
select * f rom {表A} as A
left join {表B} as B on A.AID=B.BID where B.IfValid = 1,显示出来不对,只有1,2两条数据,3没有了,我想3不管有没有从表记录都显示出来

--  作者:goldenfont
--  发布时间:2017/8/1 18:07:00
--  
也就是显示出来
1  n1   1    n11  True
2  n2   2    n21  True
3  n3   空   空      空

--  作者:有点甜
--  发布时间:2017/8/1 18:43:00
--  
select aid, a.name, iif(B.IfValid=1, b.bid, null) as bid, iif(B.IfValid=1, b.name, null) as bname from {表A} as A left join {表B} as B on A.AID=B.BID

--  作者:goldenfont
--  发布时间:2017/8/2 16:37:00
--  
使用上面的语句,会把
1  n1   1    n11  True
1  n1   1    n12   False搞出来的,我不要这个,有办法吗?
2  n2   2    n21  True
3  n3   空   空      空

--  作者:有点甜
--  发布时间:2017/8/2 17:19:00
--  
select aid, a.name, bid, b.name from {表A} as A left join {表B} as B on A.AID=B.BID where B.IfValid = 1 or B.IfValid is null

 

或者

 

select aid, a.name, iif(B.IfValid=1, b.bid, null) as bid, iif(B.IfValid=1, b.name, null) as bname from {表A} as A left join {表B} as B on A.AID=B.BID  where B.IfValid = 1 or B.IfValid is null