2013-10-15 41 views
0

我想使特定顺序的JOIN的(A加入B)加入(C加入d)

SELECT * 
FROM (lives_in as t1 NATURAL JOIN preferences p1) l1 
JOIN (lives_in t2 NATURAL JOIN preferences p2) l2 
ON l1.dormid = l2.dormid 

返回一个错误。

任何人都可以帮忙吗?非常感谢!

+0

什么是错误? –

+0

请把你的表格创建表格语法。 –

回答

2

你的别名查询缺少SELECT条款,所以试试这个:

SELECT * 
FROM (
    select * -- added this 
    FROM lives_in as t1 
    NATURAL JOIN preferences p1) l1 
JOIN (
    select * -- added this 
    FROM lives_in t2 
    NATURAL JOIN preferences p2) l2 
ON l1.dormid = l2.dormid 
+0

感谢它的工作! – BersaKAIN

1

连接顺序对结果无关紧要。你可能想要这样的事情:

SELECT * 
FROM lives_in t1 
NATURAL JOIN preferences p1 ON p1.some_id = t1.id 
NATURAL JOIN preferences p2 ON p2.some_id = t1.id 

此外,大多数人称它为INNER JOIN,而不是NATURAL JOIN,顺便说一句。

+0

顺便说一句,我不知道preference和lives_in表是如何相关的(我的假设是通过'some_id'共同的),但是你需要定义这种关系,否则JOIN是没有意义的。 –

+3

自然连接是内部连接,但连接条件的隐含*是通过匹配所有相似名称的列来实现的。基本上是一个等待发生的bug。 – Bohemian

1

希望它会很有帮助。

SELECT * 
FROM (
select * from lives_in as t1 NATURAL JOIN preferences p1 
) l1 
JOIN (
select * from lives_in t2 NATURAL JOIN preferences p2 
) l2 
ON l1.dormid = l2.dormid 
相关问题