- PR -

Ruby on RailsでのUNION

1
投稿者投稿内容
Nig
会議室デビュー日: 2008/08/31
投稿数: 7
投稿日時: 2008-08-31 18:55
初めて投稿します。
Ruby on Railsの勉強を始めたばかりなのですが、
SQLのUNIONの使用方法が分からず困っています。

初心者なので方向性自体正しくないかもしれませんが、
2つのテーブルに対しそれぞれ同等の抽出を行い1つの結果とし、
それに対しソートを行なった結果を取得したいと思い、
思い付く方法としてUNIONを試しています。

----------------------------
select * from table1
union
select * from table2;
----------------------------

というような単純なイメージなのですが、
ご教授の程宜しくお願いいたします。

---
Ruby on Rails:1.2.3
Ruby:1.8.6
PsotgreSQL:8.2.6
cordwainer
常連さん
会議室デビュー日: 2007/04/21
投稿数: 34
投稿日時: 2008-08-31 21:10
アクティブレコードを利用して、Unionを実現したい、という事でしょうか?
無理に、Findメソッドを使ってやるよりも、SQL文を実行させてしまっても
いいと思いますが。
# 無理にメソッドを作って実装しても、メンテナンスで追う事が出来なくなる
# 場合がありますので……。

あと、
> ----------------------------
> select * from table1
> union
> select * from table2;
> ----------------------------

は、カラムも全く同じなのでしょうか?

Nig
会議室デビュー日: 2008/08/31
投稿数: 7
投稿日時: 2008-08-31 22:36
ご回答いただき大変感謝いたします。
申し訳ありません、一応なのですが自己解決してしまいした。

また説明が全然足りておらず
失礼いたしました。

質問としては、
findメソッドでUNIONは可能か、
またはfind_by_sqlで変数の利用は可能か、
あるいは更に一般的な手法はありますでしょうか、というものでした。
selectを発行する際にwhere句で変数を使用したく、
その場合↓の様に行なうと思っているのですが

find(:all, :conditions => ["column1 = ?", var1])

仰る通りfindではUNIONを使用する方法がわからず、
find_by_sqlでは今度は変数を利用する方法が分からない、といった状況だったのですが、
find_by_sqlでも変数を利用することができました。

find_by_sql(["select * from table1 column1=? union select * from table2 where column1=?" "%#{var}%", "%#{var}%"])

単なる構文の把握不足でした。
ありがとうございました。



1

スキルアップ/キャリアアップ(JOB@IT)