假设只有一个table,名为pages,有四个字段,id, url,title,body。里面储存了很多网页,网页的url地址,title和网页的内容,然后你用一个sql查询将url匹配的排在最前,title匹配的其次,body匹配最后,没有任何字段匹配的,不返回。select a.[id],a. from
(
select [page].[id],100 as  from [page] where [page].[url] like '%baidu%'
union
select [page].[id],50 as  from [page] where [page].[title] like '%baidu%'
union
select [page].[id],10 as  from [page] where [page].[body] like '%baidu%'
) as a order by  desc上面的a.[id] 和 100 50 10是上面意思啊?  求解释....

解决方案 »

  1.   

    他给这段代码起了个别名叫a--这里面的100,50,10其实是hard code.
    select [page].[id],100 as  from [page] where [page].[url] like '%baidu%'
    union
    select [page].[id],50 as  from [page] where [page].[title] like '%baidu%'
    union
    select [page].[id],10 as  from [page] where [page].[body] like '%baidu%'
    这是一个表名字叫a(可以这样认为),然后从a里面获取字段。
    a.[id]就是id字段。
      

  2.   

    我认为这个语句是错误的,如果一条记录既匹配url,title,body 那岂不是要显示3次select * from 
    (select *,num1 = case when url like '%baidu%' then 8 else 0 end,
                num2 = case when title like   '%baidu%' then 4 else 0 end,
                num3 = case when body like  '%baidu%' then 2 else 0 end 
    from  pages
    ) a order by (a.num1+a.num2+a.num3)
      

  3.   

    为了实现这条件:将url匹配的排在最前,title匹配的其次,body匹配最后
    在这里用到order by 
      

  4.   

    谢谢你的 回答! 回答的很好,又给我收获了不少知识!但100 as  这样写的目的是什么?表示什么意思呢?硬编码这是不变的,在AS 1个变量?是不是就变成了100?
      

  5.   

    如果是这样的话可以不要   
    select [page].[id],100 as  from [page] where [page].[url] like '%baidu%'
    union
    select [page].[id],50 as  from [page] where [page].[title] like '%baidu%'
    union
    select [page].[id],10 as  from [page] where [page].[body] like '%baidu%'因为这整个当做一个字查询了所以必须要给一个字段名字,那么 就是充当新字段的字段名字而已了。因此也只需要在  第一条select [page].[id],100 as  from [page] where [page].[url] like '%baidu%'加上这个就可以了后面的都可以不加,仅仅用来表示新字段的名字
      

  6.   

    谢谢你的 回答! 回答的很好,又给我收获了不少知识!但100 as  这样写的目的是什么?表示什么意思呢?硬编码这是不变的,在AS 1个变量?是不是就变成了100?