有的时候我们统计需要like多个条件,比如某个字段中含有 “银行”或者“投资公司”,这个时候就用like多个字段。
如下是统计某个地区的2015年入院的病种诊断中带有 “癌”或者“肿瘤”的情况,
正确的写法如:
1 SELECT B.AAC002 身份证号, 2 B.AAC003 姓名, 3 TEMP_FUNC_WYL('AAC004', B.AAC004) 性别, 4 C.AAB004 单位, 5 C.AAB999 单位编号, 6 D.AAE006 地址, 7 D.AAE005 联系电话, 8 SUBSTR(A.CKC537, 1, 8) 入院时间, 9 SUBSTR(A.CKC538, 1, 8) 出院时间,10 A.CKC546 出院诊断,11 A.CKB519 就诊医院12 FROM KC21 A, AC01 B, AE01 C, SAC02 D13 WHERE A.AAC001 = B.AAC00114 AND B.AAC001 = D.AAC00115 AND B.AAB001 = C.AAB00116 AND B.BAE001 = '511502'17 AND SUBSTR(A.CKC537, 1, 4) = 201518 AND A.CKC546 LIKE '%癌%'19 GROUP BY B.AAC002,20 B.AAC003,21 B.AAC004,22 C.AAB004,23 C.AAB999,24 D.AAE006,25 D.AAE005,26 A.CKC537,27 A.CKC538,28 A.CKC546,29 A.CKB51930 UNION ALL31 SELECT B.AAC002 身份证号,32 B.AAC003 姓名,33 TEMP_FUNC_WYL('AAC004', B.AAC004) 性别,34 C.AAB004 单位,35 C.AAB999 单位编号,36 D.AAE006 地址,37 D.AAE005 联系电话,38 SUBSTR(A.CKC537, 1, 8) 入院时间,39 SUBSTR(A.CKC538, 1, 8) 出院时间,40 A.CKC546 出院诊断,41 A.CKB519 就诊医院42 FROM KC21 A, AC01 B, AE01 C, SAC02 D43 WHERE A.AAC001 = B.AAC00144 AND B.AAC001 = D.AAC00145 AND B.AAB001 = C.AAB00146 AND B.BAE001 = '511502'47 AND SUBSTR(A.CKC537, 1, 4) = 201548 AND A.CKC546 LIKE '%肿瘤%'49 GROUP BY B.AAC002,50 B.AAC003,51 B.AAC004,52 C.AAB004,53 C.AAB999,54 D.AAE006,55 D.AAE005,56 A.CKC537,57 A.CKC538,58 A.CKC546,59 A.CKB519;
错误的写法:
1 SELECT B.AAC002 身份证号, 2 B.AAC003 姓名, 3 TEMP_FUNC_WYL('AAC004', B.AAC004) 性别, 4 C.AAB004 单位, 5 C.AAB999 单位编号, 6 D.AAE006 地址, 7 D.AAE005 联系电话, 8 SUBSTR(A.CKC537, 1, 8) 入院时间, 9 SUBSTR(A.CKC538, 1, 8) 出院时间,10 A.CKC546 出院诊断,11 A.CKB519 就诊医院12 FROM KC21 A, AC01 B, AE01 C, SAC02 D13 WHERE A.AAC001 = B.AAC00114 AND B.AAC001 = D.AAC00115 AND B.AAB001 = C.AAB00116 AND B.BAE001 = '511502'17 AND SUBSTR(A.CKC537, 1, 4) = 201518 AND A.CKC546 LIKE '%癌%' or LIKE '%肿瘤%'19 GROUP BY B.AAC002,20 B.AAC003,21 B.AAC004,22 C.AAB004,23 C.AAB999,24 D.AAE006,25 D.AAE005,26 A.CKC537,27 A.CKC538,28 A.CKC546,29 A.CKB519
如果用这种写法,就会得到意想不到的结果。第二条统计语句的统计结果里肯定不仅仅包含2015年的情况,因为关键词 "or" 的前后是两个条件,Oracle把or前后两段当作两个完全独立的筛选条件了,or前面的是按照统计条件来统计的,而 or 后面的则 只是筛选了病种里带有“肿瘤”字样的情况。