问题描述
使用左连接、右连接和内连接时,在on后面添加条件不等于<>,无法排除数据
SELECT mard~werks,matnr,labst
FROM mard
LEFT JOIN ztac_pp001 ON ztac_pp001~werks = mard~werks
AND ztac_pp001~lgort <> mard~lgort
INTO CORRESPONDING FIELDS OF TABLE @lt_mard
FOR ALL ENTRIES IN @lt_resb
WHERE mard~matnr = @lt_resb-matnr
AND mard~werks = @lt_resb-werks
AND ztac_pp001~zactive = 'X'
AND ztac_pp001~pasch = 'PMC'.
SORT lt_mard BY werks matnr.
原因分析:
一开始以为left join…on 后面的条件不能使用不等于,调整策略,把表里的数据放到一个内表里面,使用FOR ALL ENTRIES IN ,外面加WHERE 再使用不等于(<>),结果是依然排除不掉。
解决方案:
使用RANGE表存放需要排除的数据再使用NOT IN,这样数据就被完美排除
RANGES: gr_lgort FOR mard-lgort.
SELECT werks,lgort,pasch,zactive
FROM ztac_pp001
INTO TABLE @DATA(lt_ztac_pp001)
FOR ALL ENTRIES IN @lt_resb
WHERE werks = @lt_resb-werks
AND ztac_pp001~pasch = 'PMC'
AND ztac_pp001~zactive = 'X'.
LOOP AT lt_ztac_pp001 INTO DATA(ls_ztac_pp001).
CLEAR gr_lgort.
gr_lgort-sign = 'I'.
gr_lgort-option = 'EQ'.
gr_lgort-low = ls_ztac_pp001-lgort.
APPEND gr_lgort.
ENDLOOP.
SELECT mard~werks,matnr,labst
FROM mard
INTO CORRESPONDING FIELDS OF TABLE @lt_mard
WHERE lgort NOT IN @gr_lgort.
SORT lt_mard BY werks matnr.
博客内容涉及数据库查询优化问题,通过LEFT JOIN和WHERE子句的组合,尝试排除特定数据但未成功。最终解决方案是利用RANGE表和NOT IN操作符,有效地从查询结果中过滤掉不符合条件的记录,实现了数据的精准排除。
的影响&spm=1001.2101.3001.5002&articleId=124301632&d=1&t=3&u=40b725715b9c47f1ab2cb26cd46e04d4)
1974

被折叠的 条评论
为什么被折叠?



