2014-05-15 67 views
0

我可以做些什么?我需要这样做的原因是因为表3对ID有不同的列名。我可以连接两个表,使用`AS`重命名连接以便与第三个表连接?

select * 
from (table1 join table2 using(ID)) as result 
join table3 
on result.ID = table3.different_ID 

目前我有一个语法错误,但我的查询是相当复杂的,所以我不知道这是否是问题或别的东西。

+1

不,您的派生表需要是SELECT。所以,改变,'(table1 join table2 on(ID))'like like(SELECT table1。* FROM table1 JOIN table2 ON table1.id = table2.id' – AgRizzo

回答

1

有您是否考虑过只用on

select * 
from table1 join 
    table2 
    on table1.id = table2.id join 
    table3 
    on table1.ID = table3.different_ID; 
1

你需要做这样的事情:

SELECT * 
FROM (
    SELECT * 
    FROM table1 JOIN table2 USING (ID) 
) result 
JOIN table3 ON result.ID = table3.different_ID; 

编辑:更新,以反映OP的原意和配合OP的需求考虑查询的复杂

+0

我的表1实际上是另一个'SELECT'语句的结果。因此,我不能通过名称来引用它,如'SELECT table1。*,table2。*'。是否有办法解决这个问题?我不能只用'SELECT *'而不是'SELECT table1。*,table2 。*'? – Heisenberg

+0

@Anh有几种方法...... 1.您可以避免使用子查询结构并在多个表上执行多个连接2.您可以为table1创建一个视图3.可能更多,但这些如果我不得不猜测,我会说你的整个查询可以用LEFT和INNER连接策略地构建,完全避免子查询 – Noah

+0

那么,SELECT *与SELECT table1有什么问题。*,table2。*'? – Heisenberg