2016-07-14 4 views
1

ツリーには多くのリンゴがあり、リンゴは1つのツリーにしか属していないものとします。sqlを使用して、2つ以上のリンゴを持つツリーを検索します。 ActiveRecordの使用

リンゴが2つ以上あるツリーを返すクエリを実行しようとしています。私はリンゴが木の上の実際の列が、関連性はないので、私はtree.applesを行うことができるとは思わない

Tree.joins(:apples).where('count(tree.apples) >= 2')

(pry) output error: #<ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR: syntax error at or near "tree" 

:私はこの上で立ち往生しています。

答えて

2

これは1対多の関係であるため、ツリーにはリンゴの数が分かりません。それがそうであるので、あなたは後方に行き、同じリンゴが同じ木を共有しているのを見なければなりません。

select * from apple where tree_id in (
    select tree_id from apple group by tree_id having count(*) > 1 
) 

ツリーにリンゴが1つ以上ある場合、すべてのリンゴがそれぞれのツリーによってグループ化されたテーブルが返されます。または、できるだけ行うことができます

select tree_id from apple where tree_id in (
    select tree_id from apple group by tree_id having count(*) > 1 
) 

tree_idsのテーブルだけを返すには。

参考文献:Find rows that have the same value on a column in MySQL

関連する問題