视图的查询条件问题

JoneG 2010-05-06 03:20:51
先举例如下:
1.用如下的sql查询数据,有4条记录(我想要的结果)
select * from tableA
union
select * from tableB where colId=3 or parentcolId=3
2.用如下的sql创建视图view2
select * from tableA
union
select * from tableB

执行select * from view2 where colId=3 or parentcolId=3,查询出来的记录只有2条了(不想要的结果)

问题:
为什么条件直接放在sql里与在程序中传的条件查询出来的结果会不一样呢?要怎样做才能达到我想要的结果呢?
请各位前辈指教一二!在此先谢过了~
...全文
490 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jianghuxianke 2010-05-06
  • 打赏
  • 举报
回复
这种简单查询你就用sql语句吧,用视图的话无法满足你的要求,因为你的条件不是查询两个表的共同条件
sxiaohui8709253 2010-05-06
  • 打赏
  • 举报
回复
如果方便 请帖出表结果 和给出数据
sxiaohui8709253 2010-05-06
  • 打赏
  • 举报
回复
我感觉是那个or的问题
sql中的或逻辑 如果Or前面为真 会直接忽略后面的语句
阿双2009 2010-05-06
  • 打赏
  • 举报
回复
可以通过添加一表值函数来处理:

CREATE FUNCTION [dbo].[selectByTableBID]
(
@colId int,
@parentcolId int
)
RETURNS TABLE
AS
RETURN(
select * from tableA
union
select * from tableB where colId=@colId or parentcolId=@parentcolId
)


select * FROM dbo.selectByTableBID(3,3)
通过该语句查询即可
Angellsing 2010-05-06
  • 打赏
  • 举报
回复
当然不相同啊!
select * from tableA
union
select * from tableB where colId=3 or parentcolId=3
这里是tableA的条数+tableB 满足条件的条数

select * from view2 where colId=3 or parentcolId=3

这里因为建视图了!把A,B当成一个表了

查出来的是A,B集合里面满足条件的!
阿双2009 2010-05-06
  • 打赏
  • 举报
回复

select * from tableA
union
select * from tableB where colId=3 or parentcolId=3

你这里的联合是把tableA的所有数据和tableB中字段colId或字段parentcolId为3的数据联合,也就是说这个条件只针对tableB的。而创建视图后,是把tableA和tableB的所有数据先联合起来,其后的查询条件就不仅仅只针对tableB了,是针对tableA和tableB联合后的所有数据,故自然会排除掉之前tableA中colId或parentcolId字段非3的数据,记录就减少了。不知你这边为何用到视图?
JoneG 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 luols 的回复:]
select * from tableA
union all
select * from tableB

把视图改成这个试试

另:你tableA和tableB的表结构是怎样的?
[/Quote]
用Union all的时候会多出几条重复记录。
我这里的表实际上是一个自连接的表,其中关键的是2个字段,id和parentid,想要实现的效果是传入一个parentid的值,可以把id为传入的值的数据和这个id的所有下级数据都查询出来。
现在的结果是我用第一个查询语句直接在sql中写条件能得到理想的结果,把条件去除生成view以后传条件查询就只有本级和下级的数据,再下级的就没有了。
想问问前辈,这里是有什么问题,该怎么解决?或者有更好的办法?
阿双2009 2010-05-06
  • 打赏
  • 举报
回复
select * from tableA
union all
select * from tableB

把视图改成这个试试

另:你tableA和tableB的表结构是怎样的?
jshi123 2010-05-06
  • 打赏
  • 举报
回复
是不是tableA中的记录都是 colId<>3 and parentcolId<>3
第1中写法没有对tableA过滤,第2种写法反之
zhoulingsmile 2010-05-06
  • 打赏
  • 举报
回复
帮你顶哈。。。。加油!!!
solovesnow 2010-05-06
  • 打赏
  • 举报
回复
会这样吗?帮顶……
给出结构和数据来看看
JoneG 2010-05-06
  • 打赏
  • 举报
回复
这个查询可能算是简单吧,但是加到项目里面就复杂了。因为用存储过程做了分页,要传参数进存储过程,其中包括表名、字段、条件等等很多东西,我创建视图就是把它作为一个表名传到存储过程进行分页的。但是我传条件进去查询时的结果总是不理想。我举的例子也有错,只有一个表的,如tableA(id,parentid)
其中的数据为
1 0
3 1
5 3
6 5
7 5
假设要查询id=5和其所有下级的数据,结果应该是
5 3
6 5
7 5

62,266

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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