这个SQL 该怎么写?(50分)

  • 主题发起人 主题发起人 xww
  • 开始时间 开始时间
X

xww

Unregistered / Unconfirmed
GUEST, unregistred user!
我在SQL SERVER7中写了一个View:
CREATE VIEW XA01_V(F1,F2,F3)
AS SELECT XA0101,XA0102,GC0102
FROM XA01,GC01
WHERE (XA0109*=GC0101)
go
其中,GC01 表为性别,内容如下:
GC0101 GC0102
'1' '男'
'2' '女'
在做以下查询时:
select * from xa01_v where F3='男'
出现结果为:
F1 F2 F3
01 001 男
02 002 NULL
03 003 男
04 004 NULL
而原来F1='02'的F3='女',这样的结果显然不是我希望的。
我希望只显示男性的人.
请问,这样的SQL 该如何写?
 
where F3='男' and F3 is not null
 
小天:
我刚试过你的SQL 不行,还是原来的结果!
 
你用的是什么系统?
我在SQL Server里试的时候,好象没有你所说的问题
 
小天:
我用的是MS SQl Server 7,我也是直接在Query Analyzer里试的。
是不是外连接有问题?
 
试试这个:
where F3=='男'
 
amo:
>>试试这个:where F3=='男'
系统提示 Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near '='.
==(两个等于号)语法错误.
 
我又试了一次,还是正确的
请参考:
CREATE VIEW xx(F1,F2,F3)
AS SELECT x1,x2,name
FROM zz1 a,zz2 b
WHERE (a.cg=b.cg)
select * from xx
where f3='男'
 
where f3='男' and f3<>null
不过, 关键在于你create view可能有错误.
 
小天: 你没有注意我在建立View时的条件是:
WHERE (XA0109*=GC0101)其中有一个*号,是外连接.
To cytown:
>>where f3='男' and f3<>null
>>不过, 关键在于你create view可能有错误.
我写的View 已经试过没有语法错误.你的
>>where f3='男' and f3<>null
我试了一下:结果显示的F3全为NULL.
你是否也忽视了:
WHERE (XA0109*=GC0101)其中有一个*号,是外连接.?


 
那就不要用外连接
 
我如果不用外连接,那些没有性别为空的字段则无法显示出来,该字段的
其余信息也无法得到,你有无更好的办法?
 
???
试试我的办法呀,不用*
通过别名进行连接
 
你的SQL可改成:
CREATE VIEW XA01_V(F1,F2,F3)
AS SELECT A.XA0101,A.XA0102,B.GC0102
FROM XA01 A,GC01 B
WHERE A.XA0109=B.GC0101
select * from xa01_v where F3='男'
 
小天:
你的方法和我的方法中不用外连接的结果是一样的。我View是想显示所有
的人,不管用户有没有输入性别字段(你的View中,若某人性别字段为NULL
则无法显示他的其余信息).而我的查询时,则只要符合条件的人.
请指教!
 
嗯?
>>若某人性别字段为NULL
怎么会是F3="男" ?
不是矛盾的吗?
 
To 小天:
问题是,有些用户在录入时,可能没有录入性别信息,当然F3就为NULL了,
而我在用F3='男'的条件时,结果将男性的人全选出来,而那些不是男性
的人(包括女和NULL,即未录入的)也显示出来,只是其F3显示的为NULL
(包括女性的人),这些人(非男性)其余资料则全显示出来.请问:
该如何屏蔽这些非男性的人?(在查询时,不显示出来)
 
看了半天,还是没明白:-(
老样子,用
where F3="男" and F3 is not NULL
 
从别的地方解决。
在用户在录入时,直接附个初始值,避免出现null
 
小天:
拜托你试一下我开始的View,就可以知道
>>where F3="男" and F3 is not NULL
出现的结果是非男性的也显示出来,只是显示的F3为NULL

 
后退
顶部