先举例如下:
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里与在程序中传的条件查询出来的结果会不一样呢?要怎样做才能达到我想要的结果呢?
请各位前辈指教一二!在此先谢过了~
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里与在程序中传的条件查询出来的结果会不一样呢?要怎样做才能达到我想要的结果呢?
请各位前辈指教一二!在此先谢过了~
解决方案 »
- sql语句如何拆开。用于checkboxlist中
- 怎么判断判断 Literal 是否为空?
- ASP.net加密
- repeater中每行都有选择链接,和文本框,如何使用showModalDialog返回值
- iframe问题,高手进来下
- asp.net里怎么用代码实现文件的上传下载功能啊?
- 关于table 中放label 和 textbox 控件位置不固定的问题??
- 如何给SQL数据表添加一个临时字段,并给它赋值??
- Datagrid分页中,如何在123...前加Page:
- 请问怎么用按钮,超级链接网页????
- 怎样实现母板页控制操作起容器里的内容
- 关于GridView的RowCommand问题
第1中写法没有对tableA过滤,第2种写法反之
union all
select * from tableB把视图改成这个试试另:你tableA和tableB的表结构是怎样的?
我这里的表实际上是一个自连接的表,其中关键的是2个字段,id和parentid,想要实现的效果是传入一个parentid的值,可以把id为传入的值的数据和这个id的所有下级数据都查询出来。
现在的结果是我用第一个查询语句直接在sql中写条件能得到理想的结果,把条件去除生成view以后传条件查询就只有本级和下级的数据,再下级的就没有了。
想问问前辈,这里是有什么问题,该怎么解决?或者有更好的办法?
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的数据,记录就减少了。不知你这边为何用到视图?
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集合里面满足条件的!
(
@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)
通过该语句查询即可
sql中的或逻辑 如果Or前面为真 会直接忽略后面的语句
其中的数据为
1 0
3 1
5 3
6 5
7 5
假设要查询id=5和其所有下级的数据,结果应该是
5 3
6 5
7 5