Re: Requête SQLite

Page principale

Répondre à ce message
Auteur: Marc
Date:  
À: guilde
Sujet: Re: Requête SQLite
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