两表联合查询

X281156009 2011-09-01 02:53:00


表结构:
店:Id,StoreNo ,StoreName ,Provinces,City,Region

仓库:DepotNo ,DepotName ,Provinces,City,Region

要显示效果的视图结构:

种类(ttype) 店/仓库编号(tNo) 店/仓库名(tName) 所属省(Provinces) 所属市(City) 所属区(Region )


我要从程序中传条件过来,条件有可能有三种情况:
1、where s.StoreNo =234 and d.DepotNo =345
2、where s.StoreNo =234
3、where d.DepotNo =345
这就以为着,我要从两个表中查出相关内容并整合到一起,再显示出来,我写成这样子:
declare @sqlstr varchar(max), @querywhere varchar(max)
set @querywhere='where s.StoreNo =''234'' '
set @sqlstr='
select distinct ''店'' as ttype, s.StoreNo as tNo,s.StoreName as tName,s.Provinces,s.City,s.Region
from ST_Store s,ST_Depot d '+@querywhere+'
union
select distinct ''仓库'' as ttype,d.DepotNo as tNo,d.DepotName as tName,d.Provinces,d.City,d.Region
from ST_Depot d,ST_Store s '+@querywhere

exec(@sqlstr)

执行结果:
种类(ttype) 店/仓库编号(tNo) 店/仓库名(tName) 所属省(Provinces) 所属市(City) 所属区(Region )
店 234 1 广东省 广州市 天河区
仓库 23 2 广东省 广州市 天河区
仓库 456 3 广东省 广州市 白云区
仓库 789 4 广东省 佛山 顺德区


在这里,我只想获取店“234”的资料,但结果连仓库的资料也查出来了,请问怎么写?头疼





...全文
70 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
X281156009 2011-09-01
  • 打赏
  • 举报
回复
谢谢5楼,在你的代码基础上搞出来了
X281156009 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qianjin036a 的回复:]

引用 4 楼 x281156009 的回复:
不好意思,可能我没说清楚,那个查询条件已经固定只能在一个@querywhere中,这受到程序那边那个公用查询窗体限制了

那就在存储过程里修改参数:
SQL code

--try:
declare @sqlstr varchar(max), @querywhere varchar(max)
set @querywhere='where s……
[/Quote]
貌似不行啊,查不到结果
-晴天 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 x281156009 的回复:]
不好意思,可能我没说清楚,那个查询条件已经固定只能在一个@querywhere中,这受到程序那边那个公用查询窗体限制了
[/Quote]
那就在存储过程里修改参数:

--try:
declare @sqlstr varchar(max), @querywhere varchar(max)
set @querywhere='where s.StoreNo =''234'' '

if charindex(' s.',@querywhere)=0 set @querywhere=@querywhere+' and s.storeno!=s.storeno'
if charindex(' d.',@querywhere)=0 set @querywhere=@querywhere+' and d.DepotNo!=d.DepotNo'

set @sqlstr='
select distinct ''店'' as ttype, s.StoreNo as tNo,s.StoreName as tName,s.Provinces,s.City,s.Region
from ST_Store s,ST_Depot d '+@querywhere+'
union
select distinct ''仓库'' as ttype,d.DepotNo as tNo,d.DepotName as tName,d.Provinces,d.City,d.Region
from ST_Depot d,ST_Store s '+@querywhere

exec(@sqlstr)
X281156009 2011-09-01
  • 打赏
  • 举报
回复
不好意思,可能我没说清楚,那个查询条件已经固定只能在一个@querywhere中,这受到程序那边那个公用查询窗体限制了
-晴天 2011-09-01
  • 打赏
  • 举报
回复
做成两个条件参数分别处理就行了:
declare @sqlstr varchar(max), @querywhere1 varchar(max),@querywhere2 varchar(max)
set @querywhere1='where StoreNo =''234'' '
set @querywhere1='where 1=0'
set @sqlstr='
select distinct ''店'' as ttype, StoreNo as tNo,StoreName as tName,Provinces,City,Region
from ST_Store '+@querywhere1+'
union
select distinct ''仓库'' as ttype,DepotNo as tNo,DepotName as tName,Provinces,City,Region
from ST_Depot '+@querywhere2

exec(@sqlstr)
--小F-- 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 areswang 的回复:]
搞两个参数不好,一个是门店ID,一个是仓库ID
[/Quote]

areswang 2011-09-01
  • 打赏
  • 举报
回复
搞两个参数不好,一个是门店ID,一个是仓库ID

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧