1. 程式人生 > >SQLite左外連線查詢有重複欄位處理方法

SQLite左外連線查詢有重複欄位處理方法

SQLite左外連線查詢有重複欄位處理方法

sqlite在連表查詢過程中,當主表和副表有相同的欄位時,縱然結果正確,但是在處理查詢結果時,在取主表的欄位但會返回副表的欄位值。

現有表ZWAMESSAGE和表ZWAMEDIAITEM,其中兩表中有相同的三個欄位,
這裡寫圖片描述
執行下面語句時,會產生重複欄位

SELECT * FROM ZWAMESSAGE mess LEFT OUTER JOIN ZWAMEDIAITEM ON mess.Z_PK=ZWAMEDIAITEM.ZMESSAGE

查詢結果中有重複的欄位,可以看到在主表的後面加了”(1)”如圖所示
這裡寫圖片描述
在處理結果時候,取結果中Z_PK欄位時,會得到上圖中Z_PK(1)中的資料值,而不是我們想要的Z_PK。

while ([resultSet next]) {
            NSNumber *_id = [NSNumber numberWithInt:[resultSet intForColumn:@"Z_PK"]];//辭值會是Z_PK(1)的值

解決辦法

將主表字段全部顯示,而副表只顯示部分欄位。可用如下sql查詢:

SELECT mess.*, media.ZCLOUDSTATUS, media.ZFILESIZE,media.ZMEDIAORIGIN,media.ZMOVIEDURATION ... FROMZWAMESSAGE messLEFT OUTER JOIN ZWAMEDIAITEM media ON mess.Z_PK = media.ZMESSAGE

可以看到,上述過濾了media.Z_PK、media.Z_ENT、media.Z_OPT等欄位,此時,處理過程資料獲取就正確。

開發過程中的一點小筆記,避免後續少走彎路,特記錄於此。