2013-10-15 38 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 
相關問題