首页新闻找找看学习计划

两表联合查询

0
悬赏园豆:80 [待解决问题]

declare @sqlstr varchar(max), @querywhere varchar(max)
--set @querywhere='where BarCode like ''%9%'''
--set @querywhere='where BarCode =''9'''
set @querywhere='where s.StoreNo =''234'' '
set @sqlstr='
select distinct 0 as ttype,''店'' as ttype1, s.Id,s.StoreNo as tNo,s.StoreName as tName,s.Provinces,s.City,s.Region
 from ST_Store s
 left join ST_StoreShelf as ss on (ss.S_Id=s.Id)
 left join ST_ShelfReserve as sr on (sr.S_Id=ss.Id)
 left join CO_Commodity as c on(sr.C_Id=c.Id),ST_Depot d '+@querywhere+'
 union
 select distinct 1 as ttype,''仓库'' as ttype1,d.Id,d.DepotNo as tNo,d.DepotName as tName,d.Provinces,d.City,d.Region
 from ST_Depot d
 left join ST_DepotReserve dr on (dr.D_Id=d.Id)
 left join CO_Commodity c on (c.Id=dr.C_Id),ST_Store s '+@querywhere
 

exec(@sqlstr)

问题是,我想得到的只是店的资料,它怎么不仓库的全部查出来了
问题补充:

这是运行结果:

勇气的主页 勇气 | 初学一级 | 园豆:70
提问于:2011-07-08 15:33
< >
分享
所有回答(4)
0

union是联合查询,你在后面把仓库表里面的值也查询了

蓦然回首的思念 | 园豆:900 (小虾三级) | 2011-07-08 17:36
0

union 后面加个all试试

邀月 | 园豆:25200 (高人七级) | 2011-07-10 09:27
0

union是什么意思,你知道吗?

就是把两个查询结果拼接起来。你先查询店,然后查询仓库,当然是包含了仓库的信息。除非没有满足条件的仓库。如果你只想查询店的信息,就没有必要写仓库的相关代码?union后面的没有必要写吧。

Virus-BeautyCode | 园豆:1619 (小虾三级) | 2011-07-11 14:07
我这个是有条件查询的,至于为什么,这是和我实际需要有关,Union后面是不能省去的

这个是我的条件:set @querywhere='where s.StoreNo =''234'' '
支持(0) 反对(0) 勇气 | 园豆:70 (初学一级) | 2011-07-11 16:48
0

举个例子:

a的内容:

a1

a2

a3

b的内容

b1

select * from a, b

结果:

a1 b1

a2 b1

a3 b1

select * from a, b where b = b1

结果还是

a1 b1

a2 b1

a3 b1

原因两个表没有连接条件,过滤条件是连接完以后再过滤的。

你在连接ST_Store s时也是这个问题,没有连接条件只有过滤条件。

期望该回答对你有点小帮助!

 

达叔 | 园豆:270 (菜鸟二级) | 2011-07-17 10:48
但是两个查询语句我都给它筛选条件啦
支持(0) 反对(0) 勇气 | 园豆:70 (初学一级) | 2011-07-18 09:23
因为你的union后的筛选条件也是针对商店的,而满足这个条件的商店虽然只有一条,但是商店和前面的仓库间你是没有设置连接条件的,也就是笛卡尔乘积。只有一个商店的情况下是显示所有的仓库。如果有2个满足条件的商店的话那将是所有仓库*2.
支持(0) 反对(0) 刘鸿海 | 园豆:655 (小虾三级) | 2011-07-19 16:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册