2013-08-05 2 views
0

열 식별자를 사용하려고하는이 쿼리가 있는데 (어떤 식으로 호출되는지는 모르지만) 일부는 작동하는 것처럼 보이고 다른 쿼리는 작동하지 않는 것 같습니다. 이 경우는 CA에서 SQL 쿼리의 테이블 별칭

SELECT R1.EC_Date, R1.JO_Num, R1.EC_Intitule, R1.EC_Sens, R1.EC_RefPiece, R1.EC_Piece, R1.CG_Num, R1.EC_Reference, R1.JM_Date, R1.EC_Jour, R2.EC_Lettrage, R2.EC_Pointage 
FROM ((F_COMPTEA CA INNER JOIN F_ECRITUREA EA ON CA.CA_Num = EA.CA_Num) 
       INNER JOIN F_ECRITUREC EC ON EA.EC_No = EC.EC_No) R1 
     INNER JOIN (
      SELECT * 
      FROM F_ECRITUREC 
      WHERE (CG_Num LIKE '401%' OR CG_Num LIKE '411%') 
      AND (JO_Num = 'RAN' OR JO_Num = 'ACH' OR JO_Num = 'VTE') 
      AND EC_RefPiece IN (
       SELECT EC_RefPiece 
       FROM F_ECRITUREA EA INNER JOIN F_ECRITUREC EC ON EA.EC_No = EC.EC_No 
       WHERE EC_Jour BETWEEN '1' AND '31' 
       AND JM_Date = '2013-01-07' 
       AND JO_Num = 'ACH' 
       AND EA.CA_Num LIKE '%')) R2 
     ON R1.EC_RefPiece = R2.EC_RefPiece 
WHERE EC_Jour BETWEEN '1' AND '31' 
AND JM_Date = '2013-01-07' 
AND JO_Num = 'ACH' 
AND EA.CA_Num LIKE '%'; 

는 EA와 EC 식별자는 제대로 작동하고 노력하고 가입하세요,하지만 마지막은 R1과 R2 아이디로 가입 추가 할 때, 그것은에 표시되지 않습니다 있습니다 일하고 있고, 나는 차이를 찾을 수 없습니다. 내가 가진 오류는 다음과 같습니다. R1/R2 근처의 구문이 잘못되었습니다. AS를 사용해 보았지만 작동하지 않으므로 구문 문제이거나 다른 곳에서 문제가 발생한 것 같습니다. 그건 그렇고 MS SQL입니다.

도움을 주시면 감사하겠습니다.

+0

처럼 보일 전망이다. 어떤 오류가 발생했는지 분명하게 언급하십시오. – GolezTrol

+0

근처의 구문이 잘못되었습니다. R2 근처의 구문이 잘못되었습니다. – user2618988

답변

1

SELECT 하위 쿼리 R1에 대한 절이 누락되었습니다. 그리고 더 이상 바깥 쪽 선택에 WHERE 조건이 필요하지 않습니다. R2에 적용했습니다. 그러나 확실히 외부 선택에서 EA 열을 참조 할 수 없습니다. 외부 쿼리에서는 R1 및 R2 별칭 만 사용할 수 있습니다. 말했다되고 그건

나는 * 쿼리 그들은 * 테이블 별칭라고이

SELECT R1.EC_Date, 
     R1.JO_Num, 
     R1.EC_Intitule, 
     R1.EC_Sens, 
     R1.EC_RefPiece, 
     R1.EC_Piece, 
     R1.CG_Num, 
     R1.EC_Reference, 
     R1.JM_Date, 
     R1.EC_Jour, 
     R2.EC_Lettrage, 
     R2.EC_Pointage 
    FROM 
(
    SELECT * -- you has been missing SELECT here 
     FROM F_COMPTEA CA JOIN F_ECRITUREA EA 
     ON CA.CA_Num = EA.CA_Num JOIN F_ECRITUREC EC 
     ON EA.EC_No = EC.EC_No 
) R1 JOIN 
(
    SELECT * 
     FROM F_ECRITUREC 
    WHERE (CG_Num LIKE '401%' OR CG_Num LIKE '411%') 
     AND (JO_Num = 'RAN' OR JO_Num = 'ACH' OR JO_Num = 'VTE') 
     AND EC_RefPiece IN 
     (
      SELECT EC_RefPiece 
       FROM F_ECRITUREA EA INNER JOIN F_ECRITUREC EC ON EA.EC_No = EC.EC_No 
      WHERE EC_Jour BETWEEN '1' AND '31' 
       AND JM_Date = '2013-01-07' 
       AND JO_Num = 'ACH' 
       AND EA.CA_Num LIKE '%' 
     ) 
) R2 ON R1.EC_RefPiece = R2.EC_RefPiece 
-- WHERE EC_Jour BETWEEN '1' AND '31' 
-- AND JM_Date = '2013-01-07' 
-- AND JO_Num = 'ACH' 
-- AND EA.CA_Num LIKE '%' you're no longer can reference `EA` columns in outer select. Only R1 and R2 aliases available in your outer query 
+0

SELECT *를 필자가 필요로하는 열 이름으로 바꾸면됩니다. 그렇지 않은 경우 두 번 열에 대한 오류가 두 번있었습니다. 매력처럼 작동하지만, 많이 고마워! – user2618988

+0

환영합니다. 내가 도울 수있어서 기뻐. :) – peterm

0
SELECT 
R1.EC_Date, 
R1.JO_Num, 
R1.EC_Intitule, 
R1.EC_Sens, 
R1.EC_RefPiece, 
R1.EC_Piece, 
R1.CG_Num, 
R1.EC_Reference, 
R1.JM_Date, 
R1.EC_Jour, 

R2.EC_Lettrage, 
R2.EC_Pointage 

FROM 

(SELECT * 
FROM 
F_COMPTEA 
INNER JOIN F_ECRITUREA EA 
ON CA.CA_Num = EA.CA_Num 
INNER JOIN F_ECRITUREC EC 
ON EA.EC_No = EC.EC_No 
) AS R1 


INNER JOIN 
(
SELECT * 
FROM 
F_ECRITUREC 
WHERE 
(CG_Num LIKE '401%' OR CG_Num LIKE '411%') 
AND (JO_Num = 'RAN' OR JO_Num = 'ACH' OR JO_Num = 'VTE') 
AND EC_RefPiece IN (SELECT EC_RefPiece FROM F_ECRITUREA EA INNER JOIN F_ECRITUREC EC ON EA.EC_No = EC.EC_No 
WHERE EC_Jour BETWEEN '1' AND '31' 
AND JM_Date = '2013-01-07' 
AND JO_Num = 'ACH' 
AND EA.CA_Num LIKE '%') 

) AS R2 

ON R1.EC_RefPiece = R2.EC_RefPiece 

WHERE 
R2.EC_Jour BETWEEN '1' AND '31' 
AND R2.JM_Date = '2013-01-07' 
AND R2.JO_Num = 'ACH' 
--THERE IS NO CONDITION WITHIN THIS LIKE? 
AND R2.CA_Num LIKE '%'