数据库里有几十万的定单,大部分订单将通过邮局发送,但是大约有100个左右的城市的订单需要通过快递公司发送,这些城市的名字已经保存在了数据库里.
假设订单表为Orders,其中的地址字段为Address.存储城市名的表为Citys,城市名为CityName,如何利用Sql语句,高效的把订单地址里边包含这些城市的单子和不包含这些城市的单子给区分出来呢。

解决方案 »

  1.   

    假设订单表为Orders,其中的地址字段为Address.存储城市名的表为Citys,城市名为CityName,如何利用Sql语句,高效的把订单地址里边包含这些城市的单子和不包含这些城市的单子给区分出来呢。包含
    select * from orders , citys where charindex(cityname , address) > 0
      

  2.   

    select Orders.* from Orders
    inner join Citys on charindex(CityName,Orders.Address)>0
      

  3.   

    if object_id('pubs..Orders') is not null
       drop table Orders
    go
    create table Orders(Address varchar(20))
    insert into Orders(Address) values('北京市.......')
    insert into Orders(Address) values('深圳市.......')
    insert into Orders(Address) values('广州市.......')
    insert into Orders(Address) values('天津市.......')
    insert into Orders(Address) values('重庆市.......')
    insert into Orders(Address) values('上海市.......')
    insert into Orders(Address) values('北京市.......')
    goif object_id('pubs..Citys') is not null
       drop table Citys
    go
    create table Citys(CityName varchar(20))
    insert into Citys(CityName) values('北京')
    insert into Citys(CityName) values('深圳')
    goselect * from orders , citys where charindex(cityname , address) > 0drop table Orders,Citys/*
    Address              CityName             
    -------------------- -------------------- 
    北京市.......           北京
    北京市.......           北京
    深圳市.......           深圳(所影响的行数为 3 行)
    */
      

  4.   

    select Orders.* from Orders
    inner join Citys on patindex('%'+CityName+'%',Orders.Address)>0建议建全文索引,提高速度
      

  5.   

    --不包含,使用not in,可以出结果,但查询速度很慢.你自己考虑.if object_id('pubs..Orders') is not null
       drop table Orders
    go
    create table Orders(Address varchar(20))
    insert into Orders(Address) values('北京市.......')
    insert into Orders(Address) values('深圳市.......')
    insert into Orders(Address) values('广州市.......')
    insert into Orders(Address) values('天津市.......')
    insert into Orders(Address) values('重庆市.......')
    insert into Orders(Address) values('上海市.......')
    insert into Orders(Address) values('北京市.......')
    goif object_id('pubs..Citys') is not null
       drop table Citys
    go
    create table Citys(CityName varchar(20))
    insert into Citys(CityName) values('北京')
    insert into Citys(CityName) values('深圳')
    goselect * from orders where Address not in
    (select orders.address from orders , citys where charindex(cityname , address) > 0)drop table Orders,Citys/*
    Address              
    -------------------- 
    广州市.......
    天津市.......
    重庆市.......
    上海市.......(所影响的行数为 4 行)
    */