我想选择包含相关信息的所有通知,如下所示。我也想要没有设备的通知。但是当我使用以下连接时,我只得到设备不为空的那些。左外连接不应该确保我得到表VIQMEL中的所有内容吗?如果我删除“ AND K~SPRAS EQ'E'”,我会收到没有设备的通知。
有关如何解决此问题的任何想法?
LEFT OUTER JOIN EQKT as K ON V~EQUNR EQ K~EQUNR
SELECT V~QMNUM, V~QMART, T~ISTAT, T~TXT30, V~AUFNR, V~TPLNR, V~EQUNR, V~BTPLN, V~QMNAM, V~QMGRP,
V~QMCOD, CT~KURZTEXT, GT~KURZTEXT, V~BEBER, K~EQKTX, V~QMTXT, FX~PLTXT, AX~PLTXT, V~PRIOK, V~ERDAT, S~TDID, A~RELTYPE, Z~ADUSER
FROM VIQMEL AS V
LEFT OUTER JOIN IFLOT AS F ON V~TPLNR EQ F~TPLNR
LEFT OUTER JOIN JEST AS J ON J~OBJNR EQ V~OBJNR
LEFT OUTER JOIN TJ02T AS T ON T~ISTAT EQ J~STAT
LEFT OUTER JOIN IFLOTX AS FX ON FX~TPLNR EQ V~TPLNR
LEFT OUTER JOIN IFLOTX AS AX ON AX~TPLNR EQ V~BTPLN
LEFT OUTER JOIN QPCT AS CT ON CT~CODE EQ V~QMCOD
LEFT OUTER JOIN EQKT AS K ON V~EQUNR EQ K~EQUNR
LEFT OUTER JOIN QPGT AS GT ON GT~CODEGRUPPE EQ V~QMGRP
LEFT OUTER JOIN STXH AS S ON S~TDNAME EQ V~QMNUM
LEFT OUTER JOIN SRGBTBREL AS A ON V~QMNUM EQ A~INSTID_A
LEFT OUTER JOIN ZZID_MAP AS Z ON V~QMNAM EQ Z~SAPUSER
WHERE T~SPRAS EQ @IV_SPRAS
AND V~QMNUM LIKE @P_QMNUM
AND V~EQUNR LIKE @P_EQUNR
AND V~QMNAM LIKE @P_QMNAM
AND V~AUFNR LIKE @P_AUFNR
AND F~TPLNR LIKE @P_TPLNR
AND T~ISTAT LIKE @P_ISTAT
AND V~BEBER LIKE @P_BEBER
AND J~INACT NE @ABAP_TRUE
AND T~ISTAT NE 'I0076'
AND T~SPRAS EQ 'E'
AND FX~SPRAS EQ 'E'
AND K~SPRAS EQ 'E'
INTO TABLE @ET_NOTIFS.
答案 0 :(得分:2)
旁注:EQKT
是设备短文本(不是设备),EQKT~SPRAS
是语言。
问题:您写的条件只是选择英文文本,这就是为什么忽略与非英语或非英语联合的记录的原因
所以如果你有(数字代表一个键)你的文本表
1 E ....
2 X ....
3 N ....
4 E ....
从表连接加入文本之后
1 E ....
2 [initial]
3 [initial]
4 E ....
过滤后,您将离开
1 E ....
4 E ....
由于SAP Open SQL的限制,不包括联接,以及包含基于缺少其他表中相应记录的记录的联接是不可能的。 排除联接的解决方法通常是子查询。
您可以添加子查询以根据过滤器检查选择语言,并在其他情况下忽略该过滤器(包括空记录)。尝试用以下内容替换and K~SPRAS EQ 'E'
(这里的想法是采用语言,如果它存在,否则绕过条件):
and ( K~SPRAS in (select SPRAS from EQKT where EQUNR=V~EQUNR and spras = 'E')
OR NOT EXISTS (select SPRAS from EQKT where spras = 'E')
)
这里的想法是你有2个子查询。其中一个使用肯定的检查来包括您需要的所有语言。另一个使用否定检查,并包括不存在该特定语言的记录。
在清楚地看着你的问题之后,我注意到我的解决方案可能太复杂,无法满足你的需求(即使它会起作用)。
关键+条件的标准左连接将满足您的要求。将and K~SPRAS EQ 'E'
移动到连接条件,它将完全按照您希望的方式选择(标准左连接)。另外,如果我没记错,outer
关键字在左/右连接上没有做任何事情。
LEFT JOIN EQKT AS K ON V~EQUNR EQ K~EQUNR AND K~SPRAS EQ 'E'
PS:问题中的别名和冗余连接并没有帮助它的可读性。