je le tableau suivant dans une base de données SQLite3:Utilisation de IN avec des ensembles de tuples dans SQL (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)
);
Je voudrais effectuer la requête suivante:
SELECT * FROM overlap_results WHERE
(neighbors_of_annotation, other_annotation)
IN (('16070', '8150'), ('16070', '44697'));
C'est, J'ai un couple de tuples d'annotations, et je voudrais chercher enregistrements pour chacun de ces tuples. L'invite de sqlite3 me donne l'erreur suivante:
SQL error: near ",": syntax error
Comment puis-je exprimer correctement cela comme une instruction SQL?
EDIT Je me rends compte que je ne l'ai pas bien expliquer ce que je suis vraiment après. Laissez-moi essayer une autre fissure à cela.
Si une personne me donne une liste arbitraire de termes neighbors_of_annotation
qu'ils sont intéressés, je peux écrire une instruction SQL comme ce qui suit:
SELECT * FROM overlap_results WHERE
neighbors_of_annotation
IN (TERM_1, TERM_2, ..., TERM_N);
Mais supposons maintenant que personne veut me donner des paires de termes si le formulaire (TERM_1,1, TERM_1,2)
, (TERM_2,1, TERM_2,2)
, ..., (TERM_N,1, TERM_N,2)
, où TERM_i,1
est en neighbors_of_annotation
et TERM_i,2
est en other_annotation
. Le langage SQL fournit-il un moyen tout aussi élégant de formuler la requête pour les couples (tuples) d'intérêt?
La solution la plus simple semble être de créer une nouvelle table, juste pour ces paires, puis se joindre à cette table avec la table à interroger et sélectionner uniquement les lignes où les premiers termes et les termes du deuxième match. La création de tonnes d'instructions AND/ OR
semble effrayante et propice aux erreurs.
Ceci est une bonne solution pour deux paires. J'ai mis à jour ma question pour noter que nous pouvons recevoir plusieurs paires pour lesquelles chercher. Construire une requête avec 'AND/OR' devient encombrant très rapidement. – gotgenes