【发布时间】:2016-10-08 06:58:10
【问题描述】:
我在 Oracle 11g 中有以下表格:
表 A
SITE_ID SITE_NAME VECTOR .........MANY OTHER FIELDS
BN9032U850 REY DEL MAR ENSENADA
BS2362U850 COSTA BAJA LA PAZ
BS2601U850 LA PAZ LA PAZ
BS2606U850 CONQUISTADORES LA PAZ
BN2679U850 COAST CAST TIJUANA
BN7116U850 PALACIO AZTECA TIJUANA
表 B
SITE_ID SITE_NAME VECTOR .........MANY OTHER FIELDS
BN9032 REY DEL MAR (null)
BN9033 BRISAS DEL MAR (null)
BS2601 CUMBRES DE LA PRESA (null)
BN9038G850 REAL DEL CASTILLO (null)
BS0014G850 SAN BRUNO (null)
正如您在两个表中看到的,还有许多其他字段,但我只对我写的那些(SITE_ID、SITE_NAME、VECTOR)感兴趣。
我想要实现的是创建一个包含这三列但包含两个表中的信息的视图。
但是这个视图必须满足这个条件:
- 只注意两个表中 SITE_ID 字段的前 6 个字符。
例如,表 A 中的第一条记录的 SITE_ID 为“BN9032U850”,因此如果我们对前 6 个字符进行子串化,则生成的 SITE_ID 将为“BN9032”。但正如您所见,表 B 中的第一条记录具有相同的 SITE_ID,因此会有重复记录。
如果发生这种情况,要添加到视图中的记录必须是表 A 中的记录,而不是表 B 中的记录。最后我想实现这个输出:
查看输出
SITE_ID SITE_NAME VECTOR
BN9032 REY DEL MAR ENSENADA --->Table A
BS2362 COSTA BAJA LA PAZ --->Table A
BS2601 LA PAZ LA PAZ --->Table A
BS2606 CONQUISTADORES LA PAZ --->Table A
BN2679 COAST CAST TIJUANA --->Table A
BN7116 PALACIO AZTECA TIJUANA --->Table A
BN9033 BRISAS DEL MAR (null) --->Table B
BN9038 REAL DEL CASTILLO (null) --->Table B
BS0014 SAN BRUNO (null) --->Table B
我一直在处理这句话,但似乎有问题。
SELECT SUBSTR(SITE_ID,1,6) SITE_ID,SITE_NAME, VECTOR FROM TABLE_A
WHERE(SUBSTR(SITE_ID,1,6)) NOT IN
(SELECT SUBSTR(SITE_ID,1,6) FROM TABLE_B)
UNION
SELECT SUBSTR(SITE_ID,1,6) SITE_ID,SITE_NAME, VECTOR FROM TABLE_B
WHERE(SUBSTR(SITE_ID,1,6)) NOT IN
(SELECT SUBSTR(SITE_ID,1,6) FROM TABLE_A);
我希望你能帮助我一些示例代码开始。
【问题讨论】: