这个查询如何写,求指点

Kingofcode 2015-11-20 09:14:58
有2个表

--table a
--id1,name1,remark1
--1, n1, r1
--2, n2, r2
--3, n3, r3


--table b
--id2,name2,remark2
--b1, bn1, br1
--b2, bn2, br2
--b3, bn3, br3
--b2, bn4, br5
--b3, bn5, br6
--b2, bn7, br5
--b3, bn8, br6


不考虑2个表有关联键
现在我要查询A表里面的一行或多行,其中一列是从B表里面获取的,条件都在where后面各自写各自的 ,我试过cross join可以实现,但有一种情况 当B表里没有满足条件的记录的时候 则记录就为空了 实际我无论B表里有没有记录,正确的结果都不能为空,我想了一个办法,使用cross之后 在union 单独的查询表A 可以实现 发上来 只是想看一下大家有没有更好的写法
...全文
120 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zbdzjx 2015-11-20
简单的测试了一下,只有下面这种能有个结果出来:
Select a.*,b.name2 from 
(select * from a where id1 in(1,2))a
full join 
(select * from b where id2='b10')b 
on 1=1
回复
Yole 2015-11-20
a left join b a左联接b 试一下吧~
回复
Kingofcode 2015-11-20
高手帮指点个好的解决方法啊
回复
Kingofcode 2015-11-20
问题就在后面 2个那种情况 当b表没有符合条件的记录的时候 那么我需要的结果应该是b那一列为空 记录就是A的记录 而不是所有的都为空
回复
Kingofcode 2015-11-20

Select a.*,b.name2 from a,b where a.id1=1 and b.id2='b2'

Select a.*,b.name2 from a,b where a.id1 in(1,2) and b.id2='b2'

Select a.*,b.name2 from a,b where a.id1=1 and b.id2='b10'

Select a.*,b.name2 from a,b where a.id1 in(1,2) and b.id2='b10'


id1         name1      remark1              name2
----------- ---------- -------------------- ----------
1           n1         r1                   bn2
1           n1         r1                   bn4
1           n1         r1                   bn7

(3 行受影响)

id1         name1      remark1              name2
----------- ---------- -------------------- ----------
1           n1         r1                   bn2
1           n1         r1                   bn4
1           n1         r1                   bn7
2           n2         r2                   bn2
2           n2         r2                   bn4
2           n2         r2                   bn7

(6 行受影响)

id1         name1      remark1              name2
----------- ---------- -------------------- ----------

(0 行受影响)

id1         name1      remark1              name2
----------- ---------- -------------------- ----------

(0 行受影响)




回复
spiritofdragon 2015-11-20
记录为空?是指 1、没有这行记录? 2、有这行记录,数据值在从表里查出来的是空字符串?
回复
Kingofcode 2015-11-20
简单说一下就是一个cross join 查询 的特殊情况 非关联查询,从表没有符合条件的记录的时候为空了,实际从表没有我想要的结果就是主表的记录,如果从表有符合条件的那就是cross join的结果
回复
Kingofcode 2015-11-20
@zbdzjx 的回答结果正确,已结贴
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-11-20 09:14
社区公告
暂无公告