2010-05-18 3 views
0

Im essayant de faire une requête sur sqlite. Je veux récupérer l'identifiant du serveur des serveurs qui ne sont pas associés à un identifiant de profil (j'ai l'identifiant du profil). La table serpro représente la relation n: n entre les tables.Échec de Sqlite faisant une requête

C'est ma requête (apparemment il est faux):

Select server._id, server.server 
from server where server._id != (SELECT server._id FROM server 
INNER JOIN serpro ON server._id = serpro._ids 
INNER JOIN profile ON profile._id = serpro._idp 
where profile._id=" + idProfile; 

Et ce sont les phrases de création de table:

create table server (_id integer primary key autoincrement,ip string not null, port string not null, server string not null); 

create table profile (_id integer primary key autoincrement, profile string not null); 

create table serpro (_ids integer not null, _idp integer not null, PRIMARY KEY (_ids, _idp), CONSTRAINT fk_idsps FOREIGN KEY (_ids) REFERENCES server(_id) ON DELETE CASCADE, CONSTRAINT fk_idspp FOREIGN KEY (_idp) REFERENCES server(_id) ON DELETE CASCADE); 

Merci pour votre aide!

+0

Quel message d'erreur recevez-vous? – jabbie

+0

La construction de votre requête est vulnérable à l'injection SQL. –

Répondre

1

Je vais juste jeter un coup d'oeil rapide à ce que je dirais que vous oubliez de fermer la sous-requête. Ajouter a) à la fin de votre requête

"Select server._id, server.server from server where server._id != " + 
    " (SELECT server._id FROM server INNER JOIN serpro ON server._id = serpro._ids " + 
    " INNER JOIN profile ON profile._id = serpro._idp " + 
    " where profile._id=" + idProfile + ")"; 
+0

Vous avez raison. Je vous remercie ! – fxi