2009-04-26 9 views
1

は、私は次のクエリがあります行が存在しないかどうかを知る方法?

SELECT rowid FROM table1 ORDER BY RANDOM() LIMIT 1 

をし、同様に、私は別のテーブル(表3)を持っています。そのテーブルには、table1_idとtable2_idという列があります。 table1_idはtable1の行へのリンクであり、table2_idは別のテーブルの行へのリンクです。

私の質問では、table3で定義された結果のみを取得します。 table1_id列にtable1のROWIDを持つもののみ。特定のtable1のROWIDを参照する列がない可能性があります。この場合、私はそれらを受け取りたくありません。

この目標を達成するにはどうすればよいですか?

アップデート:私は動作しません。次のクエリを、試してみました:

SELECT rowid FROM table1 
WHERE rowid IN (SELECT table1_id FROM table3 WHERE table1_id = table1.rowid) 
ORDER BY RANDOM() LIMIT 1 

答えて

1
SELECT rowid FROM table1 
WHERE rowid IN (SELECT DISTINCT table1_id FROM table3) 
ORDER BY RANDOM() LIMIT 1; 

このクエリは、「table3にエントリを持つtable1からランダム行の選択」を意味します。

テーブル1の各行は、table3で少なくとも1回参照される限り、選択される可能性が同じです(DISTINCT)。

複数の結果を取得しようとしている場合は、「ORDER BY RANDOM() LIMIT 1」句を削除する必要があります。

1

あなたは以上だけ ROWIDを選択したいと仮定すると、あなたが興味を持っているテーブル間のJOINから選択する必要があります。SQLiteのは、標準のJOIN機能のフルセットを持っていない、あなたのように、 LEFT OUTER JOINを使用できるように、クエリを再処理する必要があります。

SELECT table1.rowid, table1.other_field 
FROM table3 
    LEFT OUTER JOIN table1 ON table3.table1_id = table1.rowid 
ORDER BY RANDOM() 
LIMIT 1; 
関連する問題