您的位置:首页 > 数据库

一条SQL的语句的问题

2005-08-26 11:50 204 查看
要求:
表:IP
1 start int 4 1
0 [end] int 4 1
0 country nvarchar 50 1
表:User
1 IP int 4 0
0 UserName varchar 50 1
假设所有字段均不允许为空,start和end表示IP的区间,
现在希望能通过写一条语句,显示出所有用户所处的country,同时显示UserName.
假设:只允许在一条件语句中写出,同时不允许使用存储过程。

在SQLSERVER上试验为:
select username,country from ip,[user] where [user].ip between ip.start and ip.[end]

从上面来看,表中好像没有关联字段,这两个表之间好像没有关联,但事实上是有关联的,user.ip是落在ip.start和ip.end之间时,关联就建立起来了。
在实际使用时使用的语句是(ORACLE9i中):
SELECT * FROM User,(select begin,end,country from ip where begin <100000)
IP WHERE (user.Ip BETWEEN ip.begin AND ip.end);

但在这里有个麻烦的事情,就是user,(select begin,end,country from ip where begin <100000)
我不得不在from子句中写出
(select begin,end,country from ip where begin <100000),以对存在的区间进行过滤。
我并不希望出现这种情况,希望from中不出现任何有关ip表的信息。
而在where子句和select 子句中,可以出现ip表。

对于条件的处理之所以希望能拉到where 子句中来,是因为这个查询最终需要拼装到其它的SQL语句中,具体也很难说清楚,就事论事来说,的确不太容易。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: