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

          搜索

          •  

          積分與排名

          • 積分 - 211178
          • 排名 - 265

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宁波市| 菏泽市| 五河县| 淅川县| 安庆市| 闻喜县| 宜都市| 大冶市| 通海县| 崇仁县| 穆棱市| 马公市| 平果县| 阿城市| 阿勒泰市| 宁南县| 来凤县| 延庆县| 广汉市| 建瓯市| 安溪县| 中西区| 吴忠市| 连城县| 巧家县| 措勤县| 麻阳| 黄山市| 晋中市| 伊春市| 信宜市| 永川市| 乃东县| 凤山县| 雷州市| 灌南县| 漳州市| 阳原县| 白朗县| 泰和县| 朝阳区|