SQL supprimer des données d'une table en fonction d'une autre - SQL/NoSQL - Programmation
Marsh Posté le 22-08-2003 à 18:41:13
ceci pourra peut etre t'aider.
http://forum.hardware.fr/forum2.ph [...] ubcat=#bas
Marsh Posté le 22-08-2003 à 19:03:03
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.
Marsh Posté le 22-08-2003 à 19:11:30
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 |
Marsh Posté le 22-08-2003 à 19:26:33
Sinon, quel est ton SGBD ?
Si tu as MySQL version avant la 1.4, laisse tomber, il ne supporte pas les sous-requêtes
Marsh Posté le 22-08-2003 à 19:51:31
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!
Marsh Posté le 22-08-2003 à 20:28:59
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 ?
Marsh Posté le 22-08-2003 à 22:26:07
si tu as easyphp tu as forcement une version de mysql inferieur a 4.1 et donc tu ne peux faire ca directement.
Marsh Posté le 23-08-2003 à 02:00:11
MagicBuzz a écrit : vérifie la version de mysql |
euh... oups en effet, c'est 4.1 que je voulais dire, pas 1.4
Marsh Posté le 23-08-2003 à 19:52:01
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?
Marsh Posté le 23-08-2003 à 19:56:54
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.
Marsh Posté le 24-08-2003 à 23:15:03
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.
Marsh Posté le 22-08-2003 à 18:01:33
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!