2017-09-15 19 views
0

這個查詢產生一些奇怪的SQL和我不明白的地方怪異的表名來自:在爲什麼我的sql在Rails中產生怪異的命名?

order.apples.joins(:apple_trees).to sql

結果:

SELECT "apples".* FROM "apples" INNER JOIN "apple_trees" "apple_trees_trees" ON "apple_trees_trees"."apple_id" = "apple"."id" INNER JOIN "apple_trees" ON "apples"."id" = "apple_trees"."apple_id" WHERE "apple_trees"."tree_id" = $1 [["tree_id", 393]] 

我感到困惑的這一部分:

INNER JOIN "apple_trees" "apple_trees_trees" ON "apple_trees_trees"."apple_id" = "apple"."id" 

這是什麼apple_trees_trees的一部分?我只有一個蘋果表和一個apple_trees表。爲什麼這個sql生成的表名附加了額外的trees

+1

'apple_trees_trees'是SQL中的別名,因爲您有一個自連接,它必須爲第二個'apple_trees'表分配一些新名字 –

+1

看起來它只是一個別名。至於爲什麼?不確定。 –

+0

這是否是有效的SQL?什麼是''蘋果「。」id「'在這裏?查詢中沒有「apple」表。 –

回答

1

這是一個別名。可能更容易看到這種方式。不知道是什麼產生的。有人可能會這樣寫。我非常懷疑這是自動生成的。

INNER JOIN "apple_trees" AS ["apple_trees_trees"] 

    --Using the alias name here. 
    ON "apple_trees_trees"."apple_id" = "apple"."id" 

但是,我可能是錯的。可能有一些RAILS的自動命名生成功能會自動應用表名以避免重複。

相關問題