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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] WHERE avec NOT IN

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL] WHERE avec NOT IN

n°902684
Spir
Words are timeless
Posté le 19-11-2004 à 11:36:36  profilanswer
 

Apparement la dernière version de MySQL n'accepte pas les NOT IN.
Par quoi le remplacer?

mood
Publicité
Posté le 19-11-2004 à 11:36:36  profilanswer
 

n°902691
gizmo
Posté le 19-11-2004 à 11:44:33  profilanswer
 

par un autre dbms?
 
[:neowen]

n°902697
Spir
Words are timeless
Posté le 19-11-2004 à 11:49:58  profilanswer
 

dbms??

n°902699
effisk
我不讲中文
Posté le 19-11-2004 à 11:52:58  profilanswer
 

+1
 
ça m'intéresse cette question.


---------------
London Box Office: Comédie Musicale Londres
n°902717
krolours1
Posté le 19-11-2004 à 12:13:10  profilanswer
 

Il me semble que ça fonctionne avec les versions >= 4.
 
En passant en général il vaut mieux éviter les NOT IN.

n°902744
rufo
Pas me confondre avec Lycos!
Posté le 19-11-2004 à 12:46:20  profilanswer
 

krolours1 a écrit :

Il me semble que ça fonctionne avec les versions >= 4.
 
En passant en général il vaut mieux éviter les NOT IN.


 
ah, pourquoi? Ca prend trop de temps d'exécution?
 
Pour remplacer where val1 not in (val2, val3, ...), j'aurais fait un where ((val1 <> val2) AND (val1 <> val3) AND ...). Mais c'est clair que c'est pas génial :(... et on peut virer certaines () :D

n°902836
Arjuna
Aircraft Ident.: F-MBSD
Posté le 19-11-2004 à 15:14:44  profilanswer
 

NOT IN est à proscrire quand il est évitable parceque :
1/ C'est infiniment plus long que toutes les autres méthodes (saus des <> à la queue leue leue :lol:)
2/ Tu es limité en nombre d'éléments présents dans le NOT IN
 
Débrouille-toi pour faire ça en utilisant une jointure, ça sera plus rapide, et tu n'auras plus de limitation.

n°902838
Arjuna
Aircraft Ident.: F-MBSD
Posté le 19-11-2004 à 15:15:21  profilanswer
 

Ceci dit, comprends pas... "val2, val3, ..." c'est quoi ? des valeurs ou des colonnes ?

n°902848
rufo
Pas me confondre avec Lycos!
Posté le 19-11-2004 à 15:23:25  profilanswer
 

désolé, j'ai vraiment appelé mes champs n'importe comment. :/
 
val1 est un champ de la base (une colonne) alors que val2 et val3 sont des valeurs que peut prendre le champ val1...

n°902850
rufo
Pas me confondre avec Lycos!
Posté le 19-11-2004 à 15:24:42  profilanswer
 

Arjuna a écrit :

NOT IN est à proscrire quand il est évitable parceque :
1/ C'est infiniment plus long que toutes les autres méthodes (saus des <> à la queue leue leue :lol:)
2/ Tu es limité en nombre d'éléments présents dans le NOT IN
 
Débrouille-toi pour faire ça en utilisant une jointure, ça sera plus rapide, et tu n'auras plus de limitation.


 
ah? le not in est limité à un certain nb d'éléments? Combien pour mysql??? :(

mood
Publicité
Posté le 19-11-2004 à 15:24:42  profilanswer
 

n°902854
Valeriand
Posté le 19-11-2004 à 15:28:56  profilanswer
 

Si tu utilises le NOT IN avec une série de variables ( id NOT IN(1, 2, 3) ) pas de soucis, c'est prévu pour. Je pense que krolours1 faisait plutôt référence aux subselects dans les NOT IN: par ex WHERE id NOT IN (select id FROM table WHERE...)
Ceux là sont à éviter et à remplacer éventuellement par des NOT EXISTS (pas super propres non plus mais plus rapides et parfois on ne peut pas les éviter simplement).
Bien sûr cela ne vaut pas pour MySQL (du moins les anciennes versions) qui ne gèrent pas les sous-requêtes.
Sinon pour spir et effisk: dbms = gestionnaire de base de données. En clair MySQL, Oracle, PostgreSQL, Ingres, etc sont des dbms.


---------------
Reality is that which, when you stop believing in it, doesn't go away.
n°902855
Arjuna
Aircraft Ident.: F-MBSD
Posté le 19-11-2004 à 15:29:21  profilanswer
 

rufo a écrit :

ah? le not in est limité à un certain nb d'éléments? Combien pour mysql??? :(


Aucune idée. Oracle ça butte vers 1000 valeurs.

n°902856
Arjuna
Aircraft Ident.: F-MBSD
Posté le 19-11-2004 à 15:31:47  profilanswer
 

C'est clair que par exemple :
 

Code :
  1. SELECT *
  2. FROM T1
  3. WHERE T1.ID NOT IN (SELECT T2.ID FROM T2 WHERE T2.FK = T1.ID)


 
Est à remplacer par :
 

Code :
  1. SELECT *
  2. FROM T1
  3. WHERE NOT EXISTS (SELECT NULL FROM T2 WHERE T2.ID = T1.ID and T2.FK = T1.ID)

n°903138
Beegee
Posté le 19-11-2004 à 20:13:38  profilanswer
 

jointure externe et check à NULL ...
 
(si ça passe avec mySql ... )

n°903195
Spir
Words are timeless
Posté le 19-11-2004 à 21:17:31  profilanswer
 

Mh... Merci.
En fait j'avais commencé par faire une jointure imbriqué mais ca ne marchait pas alors j'ai opter pour une récupération des valeurs pour les mettre ds un "not in (valeur1, valeur2,...)" ce qui n'est pas top.
Bon bah je vais essayer de me débrouiller avec le NOT EXISTS que j'avais oublié.
mille merci.


Message édité par Spir le 19-11-2004 à 21:18:01
n°903564
Spir
Words are timeless
Posté le 20-11-2004 à 17:56:21  profilanswer
 

Voilà exactement le code :

Code :
  1. $requete_COMPETITION = "SELECT COMPETITION.id_competition, ... "
  2.                       . "FROM COMPETITION, MOIS "
  3.                       . "WHERE COMPETITION.id_mois = MOIS.id_mois "
  4.                       . "AND COMPETITION.id_competition NOT IN (SELECT COMPETITION.id_competition FROM COMPETITION WHERE COMPETITION.id_mois < $num_mois_courant AND COMPETITION.annee < $num_annee_suivante ) ";

n°903681
ratibus
Posté le 20-11-2004 à 20:22:37  profilanswer
 

Quelle version de MySQL ?

n°903987
rufo
Pas me confondre avec Lycos!
Posté le 21-11-2004 à 13:15:22  profilanswer
 

sous-requête detected :D Ca marche qu'avec la dernière version de MySql, je crois. C'est pas le not in qui coince...

n°904515
ratibus
Posté le 22-11-2004 à 10:07:41  profilanswer
 

C'est pour ça que j'ai demandé la version :D

n°904567
Spir
Words are timeless
Posté le 22-11-2004 à 11:39:38  profilanswer
 

Le serveur tourne avec MySQL 3.23.56

n°904580
skeye
Posté le 22-11-2004 à 11:47:50  profilanswer
 

Bingo. Les sous-requetes sont prises en charge qu'à partir de la 4.1 si ma mémoire ne me joue pas des tours.
C'est quand même super vieux comme version... [:mlc]
 
 
[edit]
 
...et tu fais mention de la "dernière version" dans ton premier post, tu es loin du compte! [:ula]


Message édité par skeye le 22-11-2004 à 11:48:45

---------------
Can't buy what I want because it's free -
n°904585
effisk
我不讲中文
Posté le 22-11-2004 à 11:58:09  profilanswer
 

ils sont pas chiés de faire tourner le site avec une vieille version comme ça! on développe avec une version plus récente, t'es obligé de vérifier la compatibilité à chaque ligne de code, relou!


---------------
London Box Office: Comédie Musicale Londres
n°904626
rufo
Pas me confondre avec Lycos!
Posté le 22-11-2004 à 13:22:40  profilanswer
 

bah, les 3.23.x ont une bonne réputation côté stabilité et tout...

n°904900
effisk
我不讲中文
Posté le 22-11-2004 à 18:19:40  profilanswer
 

rufo a écrit :

bah, les 3.23.x ont une bonne réputation côté stabilité et tout...

ahbon.
Le truc pénible, c'est que Spir développe un truc, ça marche pas en ligne, faut faire une modif, et la gonzesse qui gère le site n'y connaît absolument rien et comprend pas qu'il y ait des problèmes et du débuggage à faire...
 
'fin bref, problème réglé, merci les gars
 [:mad_oc@school]


---------------
London Box Office: Comédie Musicale Londres
mood
Publicité
Posté le   profilanswer
 


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

  [MySQL] WHERE avec NOT IN

 

Sujets relatifs
[MySQL/JAVA]pb avec driver ODBCMySQL => Sélectionner l'année d'une date
Installation de MYSQL sous Windows 2000 Server avec IISDate Auto dans MySQL
blob mysql et phpphp mysql
Supprimer une ligne d'une table MySQLMySQL, Php et un newbie...
[mysql] [java] [eclipse] config driverMysql et Foreign key ? c'est quoi le bug ?
Plus de sujets relatifs à : [MySQL] WHERE avec NOT IN


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