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等字段,此时,处理过程数据获取就正确。
开发过程中的一点小笔记,避免后续少走弯路,特记录于此。