简体   繁体   English

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

[英]SQL: convert Where clause to Inner Join

I am trying to manipulate a query by converging to JOIN but it continues with the same errors.我试图通过收敛到 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

to

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

The result of the following query does not show any fields.perform multiple variations of the inner join (left-right) with no apparent solution.以下查询的结果不显示任何字段。请在没有明显解决方案的情况下执行内部联接(左-右)的多种变体。

Thanks for your comments.感谢您的意见。

Try checking you inner join you put open and close parenthesis.尝试检查您放置了左括号和右括号的内部连接。

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

tyr something like this: tyr 是这样的:

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

you just need to remove the open and close parenthesis because it treats it as one.您只需要删除左括号和右括号,因为它将其视为一个。

You seem to be missing tables.你似乎缺少桌子。 I think this is the equivalent:我认为这是等价的:

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';

Note that T026 does not appear to have a JOIN condition, only a filtering condition.请注意, T026似乎没有JOIN条件,只有过滤条件。

I added single quotes for the comparisons to numbers that start with a zero.我添加了单引号,以便与以零开头的数字进行比较。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM