SQL查询中的表别名

SQL查询中的表别名,sql,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_EC

我在这个查询中尝试使用列标识符(我不知道它是如何调用的),但有些似乎有效,而另一些则无效

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 '%';
在这种情况下,CA、EA和EC标识符工作正常,联接工作正常,但当我尝试使用R1和R2标识符添加最后一个联接时,它似乎不工作,并且我找不到区别。 我的错误是:R1/R2附近的语法不正确。 我尝试使用AS,但它也不起作用,所以我确定这是语法问题,还是其他地方的问题造成的。 顺便说一下,是SQL女士


任何帮助都将不胜感激,谢谢

子查询
R1
缺少
SELECT
子句。 而且您可能不再需要外部选择中的
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

它们称为表别名。请清楚地说明您遇到了哪些错误。R1附近的语法不正确R2I附近的语法不正确我只需将SELECT*替换为所需的列名,否则一个列出现两次会出错。不过工作起来很有魅力,非常感谢!
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 '%'