posts - 89,  comments - 98,  trackbacks - 0

          假設只有一個table,名為pages,有四個字段,id, url,title,body。里面儲存了很多網頁,網頁的url地址,title和網頁的內容,然后你用一個sql查詢將url匹配的排在最前,title匹配的其次,body匹配最后,沒有任何字段匹配的,不返回。

          就是上面這道面試題,讓我想了一個下午,在網上找資料,最后用下面方法實現

          SELECT *
          FROM page where url like '%baidu%' or title like '%baidu%' or like ''
          ORDER BY CHARINDEX('baidu', url) DESC, CHARINDEX('baidu', title) DESC,
          ????? CHARINDEX('baidu', body) DESC

          但我感覺這種方法并不是最簡單的,后來把這個方法發給面試的人,他給我了一種更簡單方法,只要用基本的Sql語句就可以實現。代碼如下


          select a.[id],a.mark from
          (
          select [page].[id],100 as mark from [page] where [page].[url] like '%baidu%'
          union
          select [page].[id],50 as mark from [page] where [page].[title] like '%baidu%'
          union
          select [page].[id],10 as mark from [page] where [page].[body] like '%baidu%'
          ) as a? order by mark desc

          用union 實現聯合查詢,在每個查詢語句中定義一個臨時變量mark 并給mark賦值,在最后的輸出時采用mark來排序,這樣實現真的好簡單。其實這都考驗我們對Sql的編成思想。

          posted on 2006-09-19 11:28 水煮三國 閱讀(540) 評論(0)  編輯  收藏 所屬分類: Sybase
          <2006年9月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          常用鏈接

          留言簿(4)

          隨筆分類(85)

          隨筆檔案(89)

          文章分類(14)

          文章檔案(42)

          收藏夾(37)

          java

          oracle

          Sybase

          搜索

          •  

          積分與排名

          • 積分 - 211146
          • 排名 - 265

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 乌拉特中旗| 洪雅县| 根河市| 五莲县| 蒙阴县| 张家港市| 吉林省| 康乐县| 瓦房店市| 泉州市| 来安县| 鄂尔多斯市| 海安县| 桦甸市| 吴堡县| 蒲江县| 宁都县| 绥滨县| 通州区| 永昌县| 邵阳市| 仙居县| 新和县| 惠东县| 大城县| 简阳市| 高青县| 红河县| 双辽市| 武义县| 萨迦县| 山东| 阜阳市| 年辖:市辖区| 建瓯市| 台山市| 萨迦县| 云安县| 泽普县| 延川县| 陵水|