2016-08-29 29 views
0

我想创建嵌套联接语句并使用别名编程目的。让我给你一个我尝试加入的表和他们的外键列表。这是一个有效的查询吗? (别名的重复)

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

你能告诉我,如果这是一个有效的查询,并使用别名这种方式的作品?

+2

你有你使用特定的DBMS? – Zi0n1

+0

是的,SQL Server – sethu

回答

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; 

虽然,不知道该表的内容很难说,你可能会得到什么样的结果,或者你的查询是否是有效的,甚至。

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别名很可能会产生错误。

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