第2题:
表a:
北京
上海
天津
广东
表a记录700条表b
content varchar(8000)
表b的记录1000条
如何将content与表a匹配,如果content中有表a的记录,就返回,
如果content中有表a的记录符合的越多,返回的记录排序就越排前面

解决方案 »

  1.   

    第一题是不是应该这样写:假设字段名为place
    select * from 表a where '我们要到祖国的首都北京去' like ('%' + place + '%')
      

  2.   

    第二题:
    select
         t.place,
         sum(case when content like('%' + place + '%') then 1 else 0 end)as ct
    from
        (select * from @a,@b)t
    group by place
    order by ct desc
      

  3.   

    hhhdyj:第一题让我晕了很久,你换个思路就变得简单了.佩服
           :第2题也非常简洁,我老想的是循环.有个问题是select * from @a,@b,我用我的数据测试了下会产生2800000条记录,要2分钟,如是完整运行语句,返回了800条记录,要用7分钟,如何才能提高效率?
      

  4.   

    ?搂主,我的方法是你想要的?昨天回完帖子后发现自己想的不周全。
    如果  '我们要到祖国的首都北京北京去' ,统计北京时算几个?要是就算一个的话,
    就用现在的方法就可以,如果算2个的话,
    就要参照你这篇我的回复:“sql的字符处理的问题,有点难”
      

  5.   

    如果  '我们要到祖国的首都北京北京去' ,统计北京时算几个?要是就算一个的话,
    就用现在的方法就可以.
    可以不统计.2题如何将content与表a匹配,如果content中有表a的记录,就返回,不处理排序.如何做,效率能不能快点?
      

  6.   

    2题如何将content与表a匹配,如果content中有表a的记录,就返回,不处理排序.如何做,效率能不能快点?我的意思是有没有不用交差乘积的方法.
      

  7.   

    第二题:
    -----------------------------------------------------------------------------------
    declare @a table(city varchar(10))
    insert into @a select '北京'
    insert into @a select '上海'
    insert into @a select '天津'
    insert into @a select '广东'declare @b table(content varchar(40))
    insert into @b select '我们要到祖国的首都北京去'
    insert into @b select '我们要到北京和上海去'
    insert into @b select '我们要到北京、上海和广东去'
    insert into @b select '我们要到祖国的西藏去'select
        b.content,isnull(count(a.city),0) as num
    from
        @b b
    left join
        @a a
    on
        charindex(a.city,b.content)>0
    group by
        b.content
    order by 
        isnull(count(a.city),0) desc/*
    content                                  num         
    ---------------------------------------- ----------- 
    我们要到北京、上海和广东去  3
    我们要到北京和上海去  2
    我们要到祖国的首都北京去  1
    我们要到祖国的西藏去  0
    */
      

  8.   

    我认为效率没有多大提高了,
    最关键的是content这个字段不能建立索引。因为长度太长了
    个人观点。