Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1168 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  aide pour un NOT IN sur un resultat d'une requete

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

aide pour un NOT IN sur un resultat d'une requete

n°1013219
veryfree
Posté le 15-03-2005 à 12:29:32  profilanswer
 

hello,
 
je sais pas si c'est possible ce que je demande mais je tente.
 
j'aimerai faire un select avec un NOT IN qui prendrai en parametre le resultat d'une requete:
 
SELECT * FROM `membres`
WHERE id
NOT IN (
SELECT id_membres
FROM table
WHERE condition
)
 
c'est possible ?
 
je precise que j'ai un message d'erreur de mysql mais peux etre qu'il faut modifier legerement pour que ca passe.
c'est pour ca que je fait appel a vous :jap:


Message édité par veryfree le 15-03-2005 à 12:30:57
mood
Publicité
Posté le 15-03-2005 à 12:29:32  profilanswer
 

n°1013445
veryfree
Posté le 15-03-2005 à 15:28:15  profilanswer
 

up

n°1013469
skeye
Posté le 15-03-2005 à 15:43:55  profilanswer
 

ça devrait très bien fonctionner...quelle est l'erreur?


---------------
Can't buy what I want because it's free -
n°1013475
veryfree
Posté le 15-03-2005 à 15:47:23  profilanswer
 

avant de te repondre, voici ce que j'ai trouvé et qui m a aider:
 

Citation :

Select all records from a table which do not share a common ID with records from a second table:
 
select * from table1
where field1 not in (select field2 from table2)
 
Note: Sub-queries are quite slow and are not supported in MySQL, so the above will not work in MySQL.
 
or an alternative using a join (which can be much faster):
 
    select table1.* from table1
    left join table2 on (table1.field1 = table2.field2)
    where table2.field2 is null;
 
The following method (which has been suggested by Michael Miller) is to use EXISTS. It is much faster on SQL Server than the above (but Michael says it is comparable with the left join technique on Oracle):
 
    select * from table1
    where not exists (select field2 from table2 where table2.field2 = table1.field1)


 
apparemment donc, mysql ne gere pas ce genre de requete meme si c'est du SQL correct.
mieux vaux faire une jointure.
j'ai un resultat mais je serai incapable de verifier s'il est coherent  [:veryfree]


Message édité par veryfree le 15-03-2005 à 15:47:54
n°1013485
skeye
Posté le 15-03-2005 à 15:51:55  profilanswer
 

Les sous-requetes sont supportées par mysql depuis la 4.11 ou un numéro du genre...:o


---------------
Can't buy what I want because it's free -
n°1013494
veryfree
Posté le 15-03-2005 à 15:57:59  profilanswer
 

tu voulais le message d'erreur, le voici:
 
#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT id_membres
FROM  grilles
) LIMIT 0, 30' at line 4  
 
 
 

Citation :

SELECT *
FROM `membres`
WHERE id NOT
IN (
 
SELECT id_membres
FROM grilles
)
LIMIT 0 , 30


 
pas tres explicite tout ca  [:mmmfff]

n°1013500
skeye
Posté le 15-03-2005 à 16:01:45  profilanswer
 

Quelle version de mysql?


---------------
Can't buy what I want because it's free -
n°1013515
veryfree
Posté le 15-03-2005 à 16:11:12  profilanswer
 

MySQL 4.0.23_Debian-7-log  
 
on tiens peux etre quelque chose la :whistle:

n°1013517
skeye
Posté le 15-03-2005 à 16:12:18  profilanswer
 

Citation :


 Depuis MySQL version 4.1, une clause IN() peut aussi contenir une sous-requête


http://dev.mysql.com/doc/mysql/fr/ [...] ators.html


---------------
Can't buy what I want because it's free -
n°1013543
veryfree
Posté le 15-03-2005 à 16:27:28  profilanswer
 

merci,
voila qui me rassure, on va faire autrement et surement demander une mise a jour de mysql :jap:

mood
Publicité
Posté le 15-03-2005 à 16:27:28  profilanswer
 

n°1014924
Beegee
Posté le 16-03-2005 à 17:26:55  profilanswer
 

Essaye ça:
 
SELECT membres.* FROM membres
LEFT JOIN table ON table.id_membres = membres.id
WHERE table.id_membres IS NULL;
 
Le principe est de faire une jointure externe avec la table ou la ligne peut ne pas exister. Si la ligne n'existe pas, l'id_membres est mis à NULL par la jointure externe ...

n°1014981
veryfree
Posté le 16-03-2005 à 18:10:17  profilanswer
 

c'est exactement ce que j'ai fait ;)
en plus c'est plus rapide :
 

Citation :


or an alternative using a join (which can be much faster):  
 
    select table1.* from table1  
    left join table2 on (table1.field1 = table2.field2)  
    where table2.field2 is null;


 
:hello:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  aide pour un NOT IN sur un resultat d'une requete

 

Sujets relatifs
L AIDE D UN EXPERT EN VBA SVPImprimer le resultat d'une requete SQL contenu dans un rowsource
aide en graphisme de c#Requete non acceptee dans ACCESS -> pourquoi ?
Aide sur url rewriting[VB6]Execution Requete en fonction d'une selection dans une combobox
[MSSQL]Problème pour requete et connexion à une base MSSQL[PHP/MYQL] Erreur de requete
Requete 'sport' 
Plus de sujets relatifs à : aide pour un NOT IN sur un resultat d'une requete


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR