问一个非常奇怪的问题,关于一条极简单的查询语句

mingjunr 2006-06-19 12:35:25
我有一个视图,是通过左关联生成的
create view Test_View
as
select A.[ID],A.[name],B.Field1,C.Field2
from Table0 A,Table1 B,Tabel2 C
where B.[ID]=*A.[ID] and C.[ID]=*A.[ID]

目前 视图内结果为:
ID Name Field1 Field2
1 name1 null null
2 name2 null null

我用一个Sql语句
select * from Test_view where Filed1='888888888888888' or Field2='888888888888888'
得到的结果居然是:
ID Name Field1 Field2
1 name1 null null
2 name2 null null

我实在有点想不明白怎么回事,请大家帮忙给我解释一下好吗?
...全文
333 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
mingjunr 2006-06-20
  • 打赏
  • 举报
回复
不是一般的奇怪,解释不清楚
vance2005 2006-06-20
  • 打赏
  • 举报
回复
...............
奇怪的结果
tangyang887 2006-06-20
  • 打赏
  • 举报
回复
"=*"是老式写法,以后SQL不支持了,还是用"left join ……on ……"吧
mingjunr 2006-06-20
  • 打赏
  • 举报
回复
原表结构:
CREATE TABLE [dbo].[DJZDFG] (
[ZDFGBSM] [varchar] (32) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[SQSLBSM] [varchar] (32) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[QLRBSM] [varchar] (32) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[FGZDDJH] [varchar] (15) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[ZDMJ] [float] NOT NULL ,
[FGMJ] [float] NOT NULL ,
[XZDDJH] [varchar] (15) COLLATE Chinese_PRC_CI_AS NULL
)
CREATE TABLE [dbo].[DJZDHB] (
[ZDHBBSM] [varchar] (32) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[SQSLBSM] [varchar] (32) COLLATE Chinese_PRC_CI_AS NULL ,
[QLRBSM] [varchar] (32) COLLATE Chinese_PRC_CI_AS NULL ,
[HBZDDJH] [varchar] (15) COLLATE Chinese_PRC_CI_AS NULL ,
[ZDMJ] [float] NULL ,
[HBMJ] [float] NULL ,
[XZDDJH] [varchar] (15) COLLATE Chinese_PRC_CI_AS NULL
)
CREATE TABLE [dbo].[DJSYQBG] (
[SYQBGBSM] [varchar] (32) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[SQSLBSM] [varchar] (32) COLLATE Chinese_PRC_CI_AS NULL ,
[BGFLAG] [int] NULL ,
[BGBSM] [varchar] (32) COLLATE Chinese_PRC_CI_AS NULL ,
[DSYQ] [varchar] (1000) COLLATE Chinese_PRC_CI_AS NULL ,
[USYQ] [varchar] (1000) COLLATE Chinese_PRC_CI_AS NULL ,
[ISYQ] [varchar] (1000) COLLATE Chinese_PRC_CI_AS NULL ,
[USYQBGMJ] [varchar] (1000) COLLATE Chinese_PRC_CI_AS NULL ,
[ZDDJH] [varchar] (15) COLLATE Chinese_PRC_CI_AS NULL
)
CREATE TABLE [dbo].[dtwf_InstOper] (
[ID] [int] NOT NULL ,
[SQSLBSM] [varchar] (32) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[BGBH] [varchar] (32) COLLATE Chinese_PRC_CI_AS NULL ,
[IsComp] [int] NOT NULL
)

CREATE view ZDBG_ing_view
as
select A.[ID],A.SQSLBSM,B.FGZDDJH,B.XZDDJH as FGXZDDJH,C.HBZDDJH,C.XZDDJH as HBXZDDJH,D.ZDDJH as SYQZDDJH
from dtwf_InstOper A
where B.SQSLBSM=*A.SQSLBSM and C.SQSLBSM=*A.SQSLBSM and D.SQSLBSM=*A.SQSLBSM and A.IsComp=0
mingjunr 2006-06-20
  • 打赏
  • 举报
回复
改用Left Outer join后就起作用了?实在是不太明白啊,*=和Left Outer Join应该是等同的啊?
mingjunr 2006-06-20
  • 打赏
  • 举报
回复
加括号也还是那样,我再试试用left outer join,我感觉这个和我那个是一样的
十一月猪 2006-06-20
  • 打赏
  • 举报
回复
测试了一下 没有问题

不知道楼主到底哪里出了问题

不明白
建议楼主把详细的表结构贴出来
mingjunr 2006-06-19
  • 打赏
  • 举报
回复
哪有可能花眼啊,我就是郁闷的要死才来这问的,这和我预期的结果不一样啊,好纳闷啊!
fcuandy 2006-06-19
  • 打赏
  • 举报
回复
你是不是眼花了?
gohst001 2006-06-19
  • 打赏
  • 举报
回复
可能是 生成执行计划的时候把语句给优化了 把判断条件移到了连接的时候
JJ_Net 2006-06-19
  • 打赏
  • 举报
回复
你把or语句加个括号
select * from Test_view where (Filed1='888888888888888' or Field2='888888888888888')
bambuz 2006-06-19
  • 打赏
  • 举报
回复
建议将视图中:FROM ... WHERE ... 改为 FROM ... LEFT JOIN ... ON ...

Create View Test_View
AS
select A.[ID],A.[name],B.Field1,C.Field2
from Table0 A
LEFT JOIN Table1 B ON A.[ID]=B.[ID]
LEFT JOIN Tabel2 C ON C.[ID]=C.[ID]
zhenmeiyisi 2006-06-19
  • 打赏
  • 举报
回复
不用 =* 用 LEFT OUTER JOIN 看看
rouqu 2006-06-19
  • 打赏
  • 举报
回复
不解
junki 2006-06-19
  • 打赏
  • 举报
回复
把SQL SERVER删掉看一看。
mingjunr 2006-06-19
  • 打赏
  • 举报
回复
playwarcraft 2006-06-19
  • 打赏
  • 举报
回复
汗......還會有這種問題?
mingjunr 2006-06-19
  • 打赏
  • 举报
回复
执行过了问题依旧!
oop80 2006-06-19
  • 打赏
  • 举报
回复
到查询分析器里执行视图的sql
mingjunr 2006-06-19
  • 打赏
  • 举报
回复
更新过了.我刚才更新了一下,结果还是这样,是不是我 的SQLServer得老年痴呆症了?
加载更多回复(1)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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