2017-03-17 57 views
0

考慮以下表:如何通過關係表連接表格?

人:

id: integer 
name: string 

朋友:

id1: integer 
id2: integer 

我想找到所有對朋友,所以我用的是這樣的:

People.joins("JOIN friends ON friend.id1 = people.id JOIN friends ON friend.id2 = people.id") 

它生成此SQL:

SELECT "people".* FROM "people" 
JOIN friends ON friends.id1 = people.id 
JOIN people ON friends.id2 = people.id 

與以下錯誤:

(pry) output error: #<ActiveRecord::StatementInvalid: 
PG::DuplicateAlias: ERROR: table name "people" specified more than once 

出了什麼問題,指定people不止一次?

+0

嘗試'...加入上friends.id2 = p.id'人頁。你的查詢中有兩個People表,需要區分它們。你的「人物」和「朋友」模特是什麼樣的?特別是'belongs_to'和'has_many'等語句?那些通常會照顧簡單的加入。 – lurker

+0

@lurker謝謝,但現在我得到一個完全不同的錯誤。 : -/ –

+0

查看我的更新評論。你應該使用Rails模型工具來簡化它(這是使用Rails :)的一部分)。你看到了什麼不同的錯誤?你看到了什麼新的錯誤? – lurker

回答

2

給他們不同的別名:

SELECT p1.* FROM people p1 
JOIN friends ON friends.id1 = p1.id 
JOIN people p2 ON friends.id2 = p2.id 
+0

謝謝,但現在我得到這個錯誤:錯誤:缺少表「朋友」的FROM-clause條目............ LINE 1:... friends.id1 = people.id JOIN people p2 ON朋友... –

+0

@BarryFruitman好的......你在查詢中包含了「FROM」子句嗎?你的新查詢是什麼樣的? – lurker

+0

沒關係。我更新的SQL中有一個錯誤。你的解決方案有效:) –