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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  SQL supprimer des données d'une table en fonction d'une autre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

SQL supprimer des données d'une table en fonction d'une autre

n°494767
ctnul
Posté le 22-08-2003 à 18:01:33  profilanswer
 

Bonjour,
J'ai une table1 dans laquelle il y a un champ1 que je veux comparer avec le champ1 de la table2.
Si la valeur de table1.champ1 n'existe pas dans table2.champ1 alors je veux detruire l'enregistrement de la table 1.
Ca a pas l'air complique mais ca fait un moment que je bloque et la je sature alors si vous avez des idees sauvez moi!
 

mood
Publicité
Posté le 22-08-2003 à 18:01:33  profilanswer
 

n°494830
polo021
Posté le 22-08-2003 à 18:41:13  profilanswer
 
n°494882
ctnul
Posté le 22-08-2003 à 19:03:03  profilanswer
 

merci mais j'avais deja jeté un coup d'oeil dessus et quand je m'en inspire c'est pas top!
Avant de faire DELETE j'essaie deja avec select ce qui donne:
 
select * WHERE NOT EXISTS (SELECT champ1 FROM table1,table2 WHERE table1.champ1= table2.champ1)
 
bon je sais c pas ca mais j'arrive pas a la formaliser du coup j'ai essaye plus simple avec IN
select champ1 from table1 (NOT IN (SELECT champ1 FROM table2))
 
mais ca marche pas non plus,
bref je tourne autour du pot et je vois des selct en trop partout qui s'integre jamais comme je voudrais.

n°494890
mareek
Et de 3 \o/
Posté le 22-08-2003 à 19:11:30  profilanswer
 

Je crois qu'il faudrait que tu t'achète un bouquin de SQL ou que tu prenne des cours, c'est vraiment le B A BA là :/
 

DELETE FROM table1  
WHERE champ1 NOT IN (SELECT champ1 FROM table2)


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
n°494899
MagicBuzz
Posté le 22-08-2003 à 19:26:33  profilanswer
 

Sinon, quel est ton SGBD ?
 
Si tu as MySQL version avant la 1.4, laisse tomber, il ne supporte pas les sous-requêtes

n°494932
ctnul
Posté le 22-08-2003 à 19:51:31  profilanswer
 

Merci mais la je crois que c'est ma tete qui doit pas tourner rond. J'ai Easyphp 1.6 donc je pense que la version de Mysql est suffisament recente pour pouvoir accépter les requêtes imbriquées. Pourtant meme la requete la plus simple du monde, j'ai nommé:
DELETE FROM table1  
WHERE champ1 NOT IN (SELECT champ1 FROM table2)
 
il en veut pas. J'ai decomposé apparement il bloque sur le IN et j'arrive pas a le trouver dans la doc! Ca me fait chier parce que cette table trop remplie (65000 entrees) elle ralentie tout et je suis obligé de changer le temps des requetes pour qu'elles passent et ca devient hyper long!

n°494956
MagicBuzz
Posté le 22-08-2003 à 20:28:59  profilanswer
 

vérifie la version de mysql
 
mysql supporte depuis peu les sous-requêtes de ce type.
 
sinon, y'a combien de lignes dans table2 ?

n°495025
Sebastien
Posté le 22-08-2003 à 22:26:07  profilanswer
 

si tu as easyphp tu as forcement une version de mysql inferieur a 4.1 et donc tu ne peux faire ca directement.

n°495100
MagicBuzz
Posté le 23-08-2003 à 02:00:11  profilanswer
 

MagicBuzz a écrit :

vérifie la version de mysql
 
mysql supporte depuis peu les sous-requêtes de ce type.
 
sinon, y'a combien de lignes dans table2 ?


euh... oups :D en effet, c'est 4.1 que je voulais dire, pas 1.4 :ange:

n°495498
ctnul
Posté le 23-08-2003 à 19:52:01  profilanswer
 

Bon désolé de mon absence mais comme je vais pas au boulot le we j'ai reinstallé le tt sur ma machine. Avec easyphp 1.6 apparement on a effectivement une version inferieur a 4.1 ca doit etre du style 3.23.49.
Quand j'essaie chez moi ca donne le meme resultat: au moins il y a cohérence qqpart!!!
Sinon ma 2eme table a environ 6000 entrees pourquoi?

mood
Publicité
Posté le 23-08-2003 à 19:52:01  profilanswer
 

n°495501
Sebastien
Posté le 23-08-2003 à 19:54:56  profilanswer
 

Laors la j ai pas saisi ta question :-)

n°495503
ctnul
Posté le 23-08-2003 à 19:56:54  profilanswer
 

Je me demande simplement l'utilité de connaitre le nombre d'entrées des tables qd le pb se situe apparement au niveau de la requete.

n°496166
MagicBuzz
Posté le 24-08-2003 à 23:15:03  profilanswer
 

Parceque les SGBD ont une limite de nombre d'entrées pour la clause IN. Avec Oracle par exemple, c'est 1000. Je pense qu'avec MySQL, la limitation sera du même ordre de grandeur.


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

  SQL supprimer des données d'une table en fonction d'une autre

 

Sujets relatifs
[File_exists] equivalent de cette fonction appliquable en rézo ?donner une valeur par defaut a un champ lors de la création d'1 table
[ MySql ] Problème "Table inexistante" ou "Champs pas dans field list"J'arrive pas a compter le nombre d'enregistrements d'une table(mysql)
Requete SQL trop hard pour moi ![MySQL] type char et norme SQL
[php] Fonction INCLUDE chez Online.fr[Python] Fonction d'attente
[XHTML CSS] Passer site de table en div[PHP/MyQL] Comment tester l'existence d'une table ?
Plus de sujets relatifs à : SQL supprimer des données d'une table en fonction d'une autre


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