我可以做些什么?我需要这样做的原因是因为表3对ID有不同的列名。我可以连接两个表,使用`AS`重命名连接以便与第三个表连接?
select *
from (table1 join table2 using(ID)) as result
join table3
on result.ID = table3.different_ID
目前我有一个语法错误,但我的查询是相当复杂的,所以我不知道这是否是问题或别的东西。
我可以做些什么?我需要这样做的原因是因为表3对ID有不同的列名。我可以连接两个表,使用`AS`重命名连接以便与第三个表连接?
select *
from (table1 join table2 using(ID)) as result
join table3
on result.ID = table3.different_ID
目前我有一个语法错误,但我的查询是相当复杂的,所以我不知道这是否是问题或别的东西。
有您是否考虑过只用on
?
select *
from table1 join
table2
on table1.id = table2.id join
table3
on table1.ID = table3.different_ID;
你需要做这样的事情:
SELECT *
FROM (
SELECT *
FROM table1 JOIN table2 USING (ID)
) result
JOIN table3 ON result.ID = table3.different_ID;
编辑:更新,以反映OP的原意和配合OP的需求考虑查询的复杂
我的表1实际上是另一个'SELECT'语句的结果。因此,我不能通过名称来引用它,如'SELECT table1。*,table2。*'。是否有办法解决这个问题?我不能只用'SELECT *'而不是'SELECT table1。*,table2 。*'? – Heisenberg
@Anh有几种方法...... 1.您可以避免使用子查询结构并在多个表上执行多个连接2.您可以为table1创建一个视图3.可能更多,但这些如果我不得不猜测,我会说你的整个查询可以用LEFT和INNER连接策略地构建,完全避免子查询 – Noah
那么,SELECT *与SELECT table1有什么问题。*,table2。*'? – Heisenberg
不,您的派生表需要是SELECT。所以,改变,'(table1 join table2 on(ID))'like like(SELECT table1。* FROM table1 JOIN table2 ON table1.id = table2.id' – AgRizzo