Bon, il suffit de poser la question pour trouver la réponse dans la doc
et donc je me réponds. La bonne requête avec le bon opérateur(IN) est :
SELECT base_uri,filename FROM photos WHERE id IN (SELECT photo_id FROM
photo_tags WHERE tag_id = 8);
Pardon pour le bruit..
Le 15/05/2015 20:55, Marc a écrit :
> Je veux récupérer des noms de fichiers contenus dans la base de données
> sqlite3 de F-Spot.
>
> L'info est à cheval sur deux tables, la première contient des numéros de
> photos et les numéros d'étiquettes associées :
>
> CREATE TABLE photo_tags (
> photo_id INTEGER,
> tag_id INTEGER,
> UNIQUE (photo_id, tag_id)
> );
>
> La deuxième contient les infos des photos :
>
> CREATE TABLE photos (
> id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
> time INTEGER NOT NULL,
> base_uri STRING NOT NULL,
> filename STRING NOT NULL,
> description TEXT NOT NULL,
> roll_id INTEGER NOT NULL,
> default_version_id INTEGER NOT NULL,
> rating INTEGER NULL
> );
>
> Je veux récupérer le 'base_uri' et le 'filename' pour chaque photo ayant
> l'étiquette (tag_id) 8
>
> Quand je tape la commande suivante :
>
> sqlite3 photos.db 'SELECT base_uri,filename FROM photos WHERE id =
> (SELECT photo_id FROM photo_tags WHERE tag_id = 8);'
>
> sqlite3 me retourne bien le 'base_uri' et le 'filename', mais il ne me
> retourne qu'une seule ligne sur les 773 espérées alors que la
> sous-requête me retourne bien les 773 ids de photos possédant l'étiquette 8.
>
> J'ai essayé en rajoutant ALL après SELECT, mais rien de mieux
>
> Une idée ?
>
--
Marc BERLIOUX
"Je suis aveugle, mais on trouve toujours plus malheureux que soi...
J'aurais pu être noir." Ray Charles