SQL:将 Where 子句转换为内部连接



我试图通过收敛到 JOIN 来操纵查询,但它继续出现相同的错误。

SELECT TRIM(T007.CUENTA) AS CUENTA, 
T007.IDENTCLI AS IDENTTIT, 
T013.IDENTCLI AS IDENTADIC, 
TRIM(T026.DESTIPT) AS DESTIPT, 
T043.PRODUCTO, T043.SUBPRODU, 
TRIM(T043.DESPROD) AS DESPROD, 
T175.CODESTCTA, 
TRIM(T175.DESESTCTA) AS DESESTCTA, 
T043.LINEAPR    
FROM MPDT007 T007, MPDT013 T013, MPDT043 T043, MPDT175 T175 ,MPDT026 T026 
WHERE T007.CUENTA = 000005433752 
AND T007.CUENTA = T013.CUENTA  
AND T013.NUMBENCTA = 2 
AND T013.CODENT = 0001      
AND T026.INDTIPT = 3 
AND T007.PRODUCTO = T043.PRODUCTO 
AND T007.SUBPRODU = T043.SUBPRODU 
AND T007.CODESTCTA = T175.CODESTCTA  
AND T043.LINEAPR = T175.LINEA 
AND T043.LINEAPR <> 0003

SELECT TRIM(T007.CUENTA) AS CUENTA, 
T007.IDENTCLI AS IDENTTIT, 
T013.IDENTCLI AS IDENTADIC, 
T043.PRODUCTO AS PRODUCTO,  
T043.SUBPRODU AS SUBPRODU,  
TRIM(T043.DESPROD) AS DESPROD
FROM MPDT007 T007   
JOIN MPDT013 T013 ON (T013.CUENTA = T007.CUENTA AND T013.NUMBENCTA = 2 AND T013.CODENT = 0001)
JOIN MPDT043 T043 ON (T043.LINEAPR <> 0001 AND T043.PRODUCTO = T007.PRODUCTO AND T007.SUBPRODU = T043.SUBPRODU) 
WHERE 
T007.CUENTA = 000005433752

以下查询的结果不显示任何字段。执行内部联接的多种变体(左-右(,没有明显的解决方案。

感谢您的评论。

尝试检查您的内部连接,您放置了左括号和右括号。

SELECT TRIM(T007.CUENTA) AS CUENTA, 
T007.IDENTCLI AS IDENTTIT, 
T013.IDENTCLI AS IDENTADIC, 
T043.PRODUCTO AS PRODUCTO,  
T043.SUBPRODU AS SUBPRODU,  
TRIM(T043.DESPROD) AS DESPROD
FROM MPDT007 T007   
JOIN MPDT013 T013 
ON (T013.CUENTA = T007.CUENTA AND T013.NUMBENCTA = 2 AND T013.CODENT = 0001) --This is your ERROR
JOIN MPDT043 T043 
ON (T043.LINEAPR <> 0001 AND T043.PRODUCTO = T007.PRODUCTO AND T007.SUBPRODU = T043.SUBPRODU) --This is your ERROR
WHERE T007.CUENTA = 000005433752

泰尔是这样的:

SELECT TRIM(T007.CUENTA) AS CUENTA, 
T007.IDENTCLI AS IDENTTIT, 
T013.IDENTCLI AS IDENTADIC, 
T043.PRODUCTO AS PRODUCTO,  
T043.SUBPRODU AS SUBPRODU,  
TRIM(T043.DESPROD) AS DESPROD
FROM MPDT007 T007   
JOIN MPDT013 T013 
ON T013.CUENTA = T007.CUENTA 
AND T013.NUMBENCTA = 2 
AND T013.CODENT = 0001
JOIN MPDT043 T043 
ON T043.LINEAPR <> 0001 
AND T043.PRODUCTO = T007.PRODUCTO 
AND T043.SUBPRODU = T007.SUBPRODU
WHERE T007.CUENTA = 000005433752

您只需要删除左括号和右括号,因为它将其视为一个。

您似乎缺少表。 我认为这是等效的:

SELECT . . . 
FROM MPDT007 T007 JOIN
MPDT013 T013
ON T007.CUENTA = T013.CUENTA JOIN
MPDT043 T043
ON T007.PRODUCTO = T043.PRODUCTO AND
T007.SUBPRODU = T043.SUBPRODU JOIN
MPDT175 T175
ON T043.LINEAPR = T175.LINEA JOIN
ON T007.CODESTCTA = T175.CODESTCTA CROSS JOIN
MPDT026 T026 
WHERE T007.CUENTA = '000005433752' AND   
T013.NUMBENCTA = 2 
T013.CODENT = '0001' AND      
T026.INDTIPT = 3 
T043.LINEAPR <> '0003';

请注意,T026似乎没有JOIN条件,只有过滤条件。

我添加了单引号以与以零开头的数字进行比较。

最新更新