みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

TABLE内の行をランダムに半減させたい。

あるテーブル(table)の行をランダムに半減させたいと思っています。

このテーブルのキーは、instance_idとuser_idです。
つまり、同一userが複数のinstanceを持ち、同一のinstanceが複数のuserに所持されうるというテーブル構成になっています、

今、行数は200あるとしますと、

delete from table where insance_id IN (select insance_id from table order by random() limit 100)

としますと、tableの行が半減するわけではなく、同一instanceが複数userに所持されますので、もっと行数が減ってしまいます。

そこで、
# delete from table where instance_id AND user_id IN (select instance_id , user_id from table order by random() limit 100);
というようなことをしたのですが、
ERROR: subquery has too many columns
と出てしまいます。

2時間ほど、Webで調べて頑張ったのですが、よくわからないので、
これを実現するSQL文をお教えいただけませんか。
どうか、よろしくお願いいたします。

投稿日時 - 2008-10-12 11:46:19

QNo.4395780

すぐに回答ほしいです

質問者が選んだベストアンサー

こんにちは。
DELETE FROM table1 AS T1
USING (SELECT user_id, instance_id
FROM table1
ORDER BY random() LIMIT 100) AS T2
WHERE T1.user_id = T2.user_id
AND T1.instance_id = T2.instance_id;
こんな感じでだめですか?

投稿日時 - 2008-10-12 22:55:58

補足

ありがとうございます。とても助かります。
だいたい、どうすればいいのかがわかってきたきがします。
ただ、この構文で、実行すると

Error syntax error at or near "AS" at character 34

と言われます。この部分はどう修正するとよいでしょうか?

初心者でもうしわけございませんが、何かご存知でしたらお教えいただけませんか?

よろしくお願いします。

投稿日時 - 2008-10-12 23:28:57

お礼

補足につけてしまったんですが、postgres固有の問題なのでしょうか?
よろしくお願いします。

投稿日時 - 2008-10-12 23:57:38

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問