我們在做兩張表或多張表的關聯查詢時,有時會碰到查出重復記錄的情況,這對于查詢來講重復的數據是沒有意義的,應該去掉,如有A表和B表,表的結構如下:
A表: a_id varchar(10),a_name varchar(10),a_height varchar(10)
數據有:
1001,a_ffff,12
1002,a_eeee,16
1003,a_kkkk,13
B表: b_id varchar(10),b_name varchar(10),b_length varchar(10)
數據有:
1001,b_pppp,20
1001,b_pppp,10
1002,b_yyyy,14
1003,b_www,12
1003,b_www,18
進行關聯查詢時: select A.a_id,A.a_name,A.a_height,B.b_namefrom A,B where A.a_id=B.b_id;(1)
這樣就會查詢到如下的數據:
1001,a_ffff,12,b_pppp
1001,a_ffff,12,b_pppp
1002,a_eeee,16,b_yyyy
1003,a_kkkk,13,b_www
1003,a_kkkk,13,b_www
這樣就會造成有重復數據的情況,當然這和要查詢的數據內容有關,即如果還要查詢B表中的b_length 字段內容時,就不會是有重復記錄的情況了,當然這和實際需求有關,如果需求只需要查詢(1)中的內容,這就是會有重復記錄了,解決的辦法很簡單,即在查詢的字段前面加上distinct即可去掉重復記錄了,
當然B表中的數據還有一個特點,即b_id相同的記錄的b_name的數據是相同的,其他字段的數據可相同也可不同.
當然這只是舉的一個例子,實際需求中肯定會有B表這樣的數據的情況,另外,再說一下,這和要查詢的字段內容有關,即(1)語句如果還要查詢B表中的b_length 這個字段時,在上述測試的數據中,是不會存在相同記錄的.
posted on 2008-07-31 21:55
henry1451 閱讀(1089)
評論(0) 編輯 收藏