表: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.

解决方案 »

  1.   

    select username,(select max(country) from ip where ip between start and end) as country
    from user;
      

  2.   

    从表结构中看不出两个表有任何可关联字段,楼主是否没说明白?
    “回复人: bzszp(SongZip) ”都2* 了,别急。
      

  3.   

    的确没有关联字段,这两个表之间好像没有关联,但事实上是有关联的,user.ip是落在ip.start和ip.end之间时,关联就建立起来了。
    我在实际使用时使用的语句是:
    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表。
      

  4.   

    试试:
    SELECT username, country 
    FROM User,IP 
    WHERE (user.Ip BETWEEN ip.begin AND ip.end)
    and ip.begin <100000;
      

  5.   

    我觉得楼上的语句就行。ip有4段,你想怎么表示,202.10.8.125=>202010008125?
      

  6.   

    select a.username,b.country from user a,ip b where b.start<a.ip and a.ip<b.end,同时同意楼上所说的,ip分为四段,你的ip字段的长度好像设置的不太明白!