假設只有一個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
水煮三國 閱讀(538)
評論(0) 編輯 收藏 所屬分類:
Sybase