我有2个表, 表1:CGLB
BM LB
01 日用品
0102 洗手
010204 擦脸 表2: WZ
WZBM WZMC
0103789542 牙刷
0102568848 香皂
0102045485 毛巾我要用WZ,CGLB做一个联合查询,查询结果如下:
WZBM WZMC LB
0103789542 牙刷 日用品
0102568848 香皂 洗手
0102040585 毛巾 擦脸
要求是:用WZ.WZBM的头几位(不定) 与CGLB.BM 进行比较,相等的话把LB取过来。
具体过程:
比如WZ表中毛巾这条记录,他的WZBM是0102040585,那么先用01去到CGLB里找,找到日用品(01)
然后在用0102到CGLB里找,找到洗手(0102),
然后在用010204到CGLB里找,找到擦脸(010204),
然后在用01020405到CGLB里找,没找到,则 WZ表中毛巾这条记录对应的LB就是擦脸(010204).
依次类推。一句话,就是用WZ.WZBM中最长的能和CGLB.BM匹配的为准。怎么用一个SQL写出来啊?
BM LB
01 日用品
0102 洗手
010204 擦脸 表2: WZ
WZBM WZMC
0103789542 牙刷
0102568848 香皂
0102045485 毛巾我要用WZ,CGLB做一个联合查询,查询结果如下:
WZBM WZMC LB
0103789542 牙刷 日用品
0102568848 香皂 洗手
0102040585 毛巾 擦脸
要求是:用WZ.WZBM的头几位(不定) 与CGLB.BM 进行比较,相等的话把LB取过来。
具体过程:
比如WZ表中毛巾这条记录,他的WZBM是0102040585,那么先用01去到CGLB里找,找到日用品(01)
然后在用0102到CGLB里找,找到洗手(0102),
然后在用010204到CGLB里找,找到擦脸(010204),
然后在用01020405到CGLB里找,没找到,则 WZ表中毛巾这条记录对应的LB就是擦脸(010204).
依次类推。一句话,就是用WZ.WZBM中最长的能和CGLB.BM匹配的为准。怎么用一个SQL写出来啊?
cglb a,(select distinct wzbm,wzmc,max(bm) over(partition by wzbm order by length(bm) desc) bm from wz a,cglb b where instr(wzbm,bm) = 1) b
where a.bm = b.bm;
---------- ----------
01 日用品
0102 洗手
010204 擦脸已用时间: 00: 00: 00.00
11:21:54 scott@TUNGKONG> select * from wz;WZBM WZMC
---------- ----------
0103789542 牙刷
0102568848 香皂
0102040585 毛巾已用时间: 00: 00: 00.01
11:22:00 scott@TUNGKONG> select wzbm,wzmc,lb from
11:22:07 2 cglb a,(select distinct wzbm,wzmc,max(bm) over(partition by wzbm order by length(bm) desc) bm from wz a,cglb b where instr(wzbm,bm) = 1) b
11:22:07 3 where a.bm = b.bm;WZBM WZMC LB
---------- ---------- ----------
0103789542 牙刷 日用品
0102568848 香皂 洗手
0102040585 毛巾 擦脸已用时间: 00: 00: 00.00
cglb a,(select distinct wzbm,wzmc,max(bm) over(partition by wzbm order by length(bm) desc) bm from wz a,cglb b where instr(wzbm,bm) = 1) b
where a.bm = b.bm;