如何将含FOR ALL ENTRIES的ABAP SELECT语句转换为JOIN?
把FOR ALL ENTRIES转换为JOIN的实操方法
假设你的内表it_metropolitans是由多个表(比如metro和region)连接生成的,先明确生成it_metropolitans的原始逻辑,比如它的生成语句可能是这样:
SELECT metro~city_id INTO TABLE it_metropolitans FROM metro JOIN region ON metro~region_id = region~id WHERE region~country = 'CN'.
你原来用FOR ALL ENTRIES的查询逻辑是:从city表筛选出city_id存在于it_metropolitans中,且winter不等于cold的数据。要转换成JOIN写法,直接把生成it_metropolitans的所有源表和city表做关联,合并所有过滤条件即可,最终语句如下:
SELECT DISTINCT city~* INTO TABLE it_city_table FROM city JOIN metro ON city~city_id = metro~city_id JOIN region ON metro~region_id = region~id WHERE region~country = 'CN' AND city~winter NE 'cold'.
关键注意点:
- 关联逻辑替换:用
city表和源表(比如metro)的city_id相等,替代原来FOR ALL ENTRIES的匹配逻辑 - 合并过滤条件:把生成
it_metropolitans时的所有过滤条件(比如region~country = 'CN')和city表自身的条件(winter NE 'cold')放在同一个WHERE子句里 - 去重处理:因为
FOR ALL ENTRIES会自动对驱动表(it_metropolitans)去重,JOIN时如果源表连接会产生重复的city_id,必须加DISTINCT避免结果出现重复数据
通用转换步骤:
- 梳理出生成
it_metropolitans的所有源表、表间连接条件、过滤条件 - 将这些源表与
city表通过共同字段(这里是city_id)建立JOIN关联 - 合并所有过滤条件(生成
it_metropolitans的条件 +city表的过滤条件) - 根据源表连接是否会产生重复数据,决定是否添加
DISTINCT
内容的提问来源于stack exchange,提问作者user11074048
相关产品推荐
相关产品推荐

