这是一个有效的查询吗? (重复别名)

时间:2016-08-29 17:55:34

标签: sql sql-server select join alias

我正在尝试创建嵌套的连接语句并使用别名进行编程。让我给你一个我正在尝试加入的表和他们的外键列表。

TABLE1: id (Foreign key)
TABLE2: id (primary key), idx (foreign key)
TABLE3: id (primary key), idx (primary key)
TABLE4: id (primary key), idx (primary key)`

SELECT * 
FROM (((TABLE1 JOIN
        TABLE2
        ON TABLE1.id = TABLE2.id
       ) AS NEW_TABLE JOIN
       TABLE3
       ON NEW_TABLE.id = TABLE3.id AND NEW_TABLE.idx = TABLE3.idx
      ) AS NEW_TABLE JOIN
      TABLE4
      ON NEW_TABLE.id = TABLE4.id AND
         NEW_TABLE.idx = TABLE4.idx
     );

如果这是一个有效的查询并以这种方式使用别名可以让我知道吗?

3 个答案:

答案 0 :(得分:1)

我不这么认为。我会把它写成:

SELECT * 
FROM TABLE1 JOIN
     TABLE2
     ON TABLE1.id = TABLE2.id JOIN
     TABLE3
     ON TABLE1.id = TABLE3.id AND TABLE2.idx = TABLE3.idx
     TABLE4
     ON TABLE1.id = TABLE4.id AND
        TABLE2.idx = TABLE4.idx;

(嗯,实际上,我会使用表别名,但这是个主意。)

括号对你没有任何作用。我还认为重新使用NEW_TABLE别名可能会产生错误。

答案 1 :(得分:0)

你可能需要嵌套完整的查询:

SELECT * FROM 
  (SELECT * FROM 
    (SELECT * FROM TABLE1 JOIN TABLE2 ON TABLE1.id = TABLE2.id ) A 
    JOIN TABLE3 ON A.id = TABLE3.id AND A.idx = TABLE3.idx) B 
  JOIN TABLE4 ON B.id = TABLE4.id AND B.idx = TABLE4.idx;

虽然在不知道表格内容的情况下很难说出您可能获得的结果类型或查询是否有效。

答案 2 :(得分:0)

格式如下..

SELECT * FROM 
  TABLE1 
     JOIN TABLE2 ON TABLE1.id = TABLE2.id
     JOIN TABLE3 ON Table1.id = TABLE3.id 
        AND Table2.idx = TABLE3.idx
   JOIN TABLE4 ON Table3.id = TABLE4.id 
      AND Table3.idx = TABLE4.idx