プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。
PostgreSQL 7でシステムを開発中ですが、同一テーブルから「列~の値が■のものを2件、列~の値が▲のものを2件、列~の値が●のものを2件、それ以外のものからランダムに2件を取得」したいのですが、実現できなくて困っています。

select * from table where culumn = 'data1' limit 2
union
select * from table where culumn = 'data2' limit 2

というようなことなのですが、これでは「limit 2」でparse errorとなってしまいます。
できれば上記のSQL定義でビューを作りたいところなのですが、いい方法はないでしょうか?
よろしくお願いします。

A 回答 (1件)

unionを使っているため、limit使用時に全体でのlimitなのか各SELECT文ごとのlimitなのかでわからずエラーになるようです。



そこで、括弧で括ってやるといいです。
ところで、■▲●で2件取得のところは ORDER BYでソートしなくていいんでしょうか?
該当する列が元々2件だけしかないなら別ですが・・・。

(select * from table where culumn = '■' limit 2)
union
(select * from table where culumn = '▲' limit 2)
union
(select * from table where culumn = '●' limit 2)
union
(select * from table where culumn != '■' and culumn != '▲'and culumn != '●' order by random() limit 2)
    • good
    • 1
この回答へのお礼

ありがとうございます。
教えていただいた方法で期待通りに動きました。
括弧でくくるという発想がでてきませんでした。基礎からやり直します。ありがとうございました。

お礼日時:2005/04/20 17:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す