先举例如下:
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里与在程序中传的条件查询出来的结果会不一样呢?要怎样做才能达到我想要的结果呢?
请各位前辈指教一二!在此先谢过了~
------解决方案--------------------------------------------------------
是不是tableA中的记录都是 colId<>3 and parentcolId<>3
第1中写法没有对tableA过滤,第2种写法反之
------解决方案--------------------------------------------------------
select * from tableA
union all
select * from tableB
把视图改成这个试试
另:你tableA和tableB的表结构是怎样的?
------解决方案--------------------------------------------------------
- SQL code
select * from tableAunion select * from tableB where colId=3 or 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集合里面满足条件的!
------解决方案--------------------------------------------------------
可以通过添加一表值函数来处理:
- SQL code
CREATE FUNCTION [dbo].[selectByTableBID] (@colId int,@parentcolId int) RETURNS TABLE AS RETURN(select * from tableAunionselect * from tableB where colId=@colId or parentcolId=@parentcolId)
------解决方案--------------------------------------------------------
我感觉是那个or的问题
sql中的或逻辑 如果Or前面为真 会直接忽略后面的语句
------解决方案--------------------------------------------------------
这种简单查询你就用sql语句吧,用视图的话无法满足你的要求,因为你的条件不是查询两个表的共同条件