Sequelを使用して、いくつかの列名を共有する2つのサブクエリを結合し、selectでそれらの列をテーブル修飾します。
2つのデータセットが単なるテーブルである場合、これを行う方法を理解しています。たとえば、ユーザーに属するアイテムusers
を含むテーブルとitems
テーブルがあり、アイテムの名前とその所有者の名前を一覧表示したい場合:
@db[:items].join(:users, :id => :user_id).
select{[items__name, users__name.as(user_name)]}
を生成します
SELECT "items"."name", "users"."name" AS "user_name"
FROM "items"
INNER JOIN "users" ON ("users"."id" = "items"."user_id")
望んだ通りに。
my_items
ただし、サブクエリを表す2つの任意のデータセットを結合している場合(これらをとと呼ぶmy_users
) 、これを行う方法がわかりません。
構文はおそらく次の形式を取ります
my_items.join(my_users, :id => :user_id).
select{[ ... , ... ]}
アクセスするための修飾された列名を指定しmy_users.name
ますmy_items.name
。これを行うための適切な構文は何ですか?
部分的な解決策は、結合に提供されるデータセットが、などでエイリアス化されているように見えるため、最初の引数に使用することt1__name
です。しかし、それは、2番目の引数に提供する必要があるアイテム名を修飾するのに役立ちません。t1
t2
最も望ましい解決策は、たとえば次のように、結合内のデータセットのエイリアスを提供できるようになると思います(もちろん、これはいくつかの理由で機能しません)
my_items.as(alias1).join(my_users.as(alias2), :id => :user_id).
select{[alias1__name, alias2__name ]}
これを行う方法はありますか?
ありがとう!
アップデート
私はfrom_self
そこへの道の一部になると思います、例えば
my_items.from_self(:alias => :alias1).join(my_users, :id => :user_id).
select{[alias1__name, t1__name]}
正しいことをしているようです。