SQLite3 データベースに次のテーブルがあります。
CREATE TABLE overlap_results (
neighbors_of_annotation varchar(20),
other_annotation varchar(20),
set1_size INTEGER,
set2_size INTEGER,
jaccard REAL,
p_value REAL,
bh_corrected_p_value REAL,
PRIMARY KEY (neighbors_of_annotation, other_annotation)
);
次のクエリを実行したいと思います。
SELECT * FROM overlap_results WHERE
(neighbors_of_annotation, other_annotation)
IN (('16070', '8150'), ('16070', '44697'));
つまり、アノテーション ID のタプルがいくつかあり、それらのタプルごとにレコードを取得したいと考えています。sqlite3 プロンプトで次のエラーが表示されます。
SQL error: near ",": syntax error
これをSQL文として適切に表現するにはどうすればよいですか?
編集私が本当に求めているものをうまく説明していないことに気づきました。これで別のクラックを試してみましょう。
ある人が興味のある用語の任意のリストをくれた場合neighbors_of_annotation
、次のような SQL ステートメントを書くことができます。
SELECT * FROM overlap_results WHERE
neighbors_of_annotation
IN (TERM_1, TERM_2, ..., TERM_N);
しかし今、その人が(TERM_1,1, TERM_1,2)
, , (TERM_2,1, TERM_2,2)
...,という形の用語のペアを私に与えたいと思っているとします。SQL 言語は、関心のあるペア (タプル) のクエリを定式化するための同様に洗練された方法を提供しますか?(TERM_N,1, TERM_N,2)
TERM_i,1
neighbors_of_annotation
TERM_i,2
other_annotation
最も簡単な解決策は、これらのペアのためだけに新しいテーブルを作成し、そのテーブルをクエリ対象のテーブルに結合し、最初の用語と2番目の用語が一致する行のみを選択することです。大量のAND /
OR
ステートメントを作成するのは恐ろしく、エラーが発生しやすいように見えます。