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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  delete from

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

delete from

n°1655795
Grald25
Posté le 10-12-2007 à 13:22:40  profilanswer
 

Bonjour  
 
j'ai 2 table sur access: table_1 (300000 enregistrements) et table_2 (3000 enregistrements). La table_2 étant les suppressions à faire dans la table_1.  
-TABLE_1  
NOM1 NOM2 A B C  
-TABLE_2  
NOM1 NOM2  
J'essaye donc de créer une requête sql de suppression des enregistrements de la table 2 vers table 1 (ce qui permet d'identifier de manière unique un enregistrement est Nom1 + Nom2)  
 
J'ai testé avec les 2 requête suivantes le problème est qu'il me supprime tous les enregistrements (donc plus que prévu) où il trouve une correspondance entre:  
TABLE_1.NOM1 ET TABLE_2.NOM1  
OU  
TABLE_1.NOM2 ET TABLE_2.NOM2  
 
 
DELETE *  
FROM TABLE_1  
WHERE NOM1 IN (SELECT NOM1 FROM TABLE_2) AND NOM2 IN (SELECT NOM2 FROM TABLE_2);  
 
DELETE *  
FROM TABLE_1  
WHERE TABLE_1.NOM1 IN (SELECT TABLE_1.NOM1 FROM TABLE_1 INNER JOIN TABLE_2 ON (TABLE_2.NOM1 = TABLE_1.NOM1))  
AND TABLE_1.NOM2 IN (SELECT TABLE_1.NOM2 FROM TABLE_1 INNER JOIN TABLE_2 ON (TABLE_2.NOM2 = TABLE_1.NOM2));  
 
Merci pour votre aide

mood
Publicité
Posté le 10-12-2007 à 13:22:40  profilanswer
 

n°1655808
Taz
bisounours-codeur
Posté le 10-12-2007 à 13:40:19  profilanswer
 

(nom1, nom2) c'est une clef ?

n°1655809
olivthill
Posté le 10-12-2007 à 13:41:16  profilanswer
 

Essayer

DELETE *  
FROM TABLE_1  
WHERE TABLE_1.NOM1 & "|" & TABLE_1.NOM2
 IN (SELECT TABLE_2.NOM1 & "|" & TABLE_2.NOM2 FROM TABLE_2);  


Message édité par olivthill le 10-12-2007 à 13:41:33
n°1655855
Taz
bisounours-codeur
Posté le 10-12-2007 à 14:09:22  profilanswer
 

c'est bien sauf que c'est pas du SQL.

n°1655905
casimimir
Posté le 10-12-2007 à 15:02:45  profilanswer
 

le truc de olivthill devrait marcher si le & est une concatenation en access et que les quotes sont les bonnes.
 
sinon ceci devrait passer en oracle, ptetre que en access aussi même si j'ai un doute
 

Code :
  1. where (a.nom1,a.nom2) in (select b.nom1,b.nom2 from table2 b)

n°1655948
Grald25
Posté le 10-12-2007 à 15:38:18  profilanswer
 

(Pas essayer celle olivthill vu que pas sql) mais la requête de Casimimir ne fonctionne pas et access me renvoi le message suivant:
 
Vous avez écrit une sous-requête pouvant renvoyer plus d’un champ sans utiliser le mot réservé EXISTS dans la clause FROM de la requête principale. Révisez l'instruction SELECT de la sous-requête pour obtenir un seul champ.

n°1655989
kao98
...
Posté le 10-12-2007 à 16:06:46  profilanswer
 

Regarde du côté de
 
DELETE *
FROM X
USING Y


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1656005
kao98
...
Posté le 10-12-2007 à 16:19:02  profilanswer
 

Autant pour moi : pas de USING sous Access.
 
Par contre, ça, ça doit fonctionner (même principe que le USING en fait) :
DELETE Table1.*
FROM Table1 t1, Table2 t2
WHERE t1.foo = t2.bar


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1656028
casimimir
Posté le 10-12-2007 à 16:54:45  profilanswer
 

je vois pas trop en quoi la requete de olivthill n'est pas du sql mais bon...

n°1656238
Taz
bisounours-codeur
Posté le 11-12-2007 à 08:44:00  profilanswer
 

casimimir a écrit :

je vois pas trop en quoi la requete de olivthill n'est pas du sql mais bon...


laisse tomber

mood
Publicité
Posté le 11-12-2007 à 08:44:00  profilanswer
 

n°1656293
casimimir
Posté le 11-12-2007 à 09:59:49  profilanswer
 

ou bien tu parlais des premieres requetes de gerald25? car il n'a pas essayé celle d'olivthill a cause de ce commentaire.

n°1656434
Grald25
Posté le 11-12-2007 à 11:40:56  profilanswer
 

J'ai essayer quand même celle d'olivthill (au cas ou) mais access ne comprend pas la requete et me renvoie un message d'erreur de syntaxe sql

n°1656457
casimimir
Posté le 11-12-2007 à 12:01:19  profilanswer
 

c'est ce que j'avais mentionné, c'est la ou il faudrait que qqu'un utilisant access puisse aider, dans sa requete il a utilié & pour concaténer les chaines de caractères, est ce que & sert a cela sous access, et est ce que les doubles quotes " servent bien a quoter une chaine litérale en access, par exemple en oracle ce sont les simples.
 
son delete est incorrect mais bon l'idée était la
 
sous oracle j'aurai écris:
 

Code :
  1. DELETE TABLE_1 
  2. WHERE (TABLE_1.NOM1 || '|' || TABLE_1.NOM2)
  3. IN (SELECT TABLE_2.NOM1 || '|' || TABLE_2.NOM2 FROM TABLE_2);


Message édité par casimimir le 11-12-2007 à 12:07:07
n°1656520
kao98
...
Posté le 11-12-2007 à 13:39:44  profilanswer
 

En access, si mes souvenirs sont bon, pour concaténer les chaines, c'est '+'.
Ceci dit, ma solutin fonctionne et est quand même plus "propre" !


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1656734
MagicBuzz
Posté le 11-12-2007 à 17:52:09  profilanswer
 

Code :
  1. DELETE table1
  2. WHERE EXISTS (SELECT NULL FROM table2 WHERE table2.nom1 = table1.nom1 AND table2.nom2 = table1.nom2)


 
Ca devrait marcher.

n°1657004
Grald25
Posté le 12-12-2007 à 09:50:04  profilanswer
 

Un grand merci à tous  
 
La requete de magic buzz marche (juste rajouter le from après delete)
 
Tu ma enlevé une sacré épine du pied


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

  delete from

 

Sujets relatifs
Surcharge de l'opérateur = + Appel non souhaité à deleterequete delete avec un MIN
de l'utilité du "from t1 a , t1 b"[EXCEL]identifier et ramener titre colonne from contenu cellule
Correction d'une requete SQL Delete....[Erreur] Creating default object from empty value
SQL delete from (VB6)[MySQL] comment faire : DELETE FROM table1,table2 WHERE id=2 [résolu]
"DELETE FROM `guest` WHERE `id` ='$id' LIMIT 1"; ca ne marche pa :cry:[PHP] problème avec la requête DELETE FROM.
Plus de sujets relatifs à : delete from


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