Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les enregistrements pour
lesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans table 2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les enregistrements pour
lesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans table 2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les enregistrements pour
lesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans table 2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in message
news:Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les enregistrements
pour
lesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans table
2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" <alain.teyssedre-NoSpam@libertysurf.fr> wrote in message
news:eCKfSdDuDHA.2520@TK2MSFTNGP10.phx.gbl...
Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les enregistrements
pour
lesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans table
2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in message
news:Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les enregistrements
pour
lesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans table
2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
Bonjour Michel
Malheureusement ta suggestion ne me permet pas d'obtenir ce que je
souhaite.
En fait je sais sélectionner les enregistrements de Table1 qui
m'interressent avec la requete:
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
Comme tu le comprends je ne compare les valeurs que de 2 champs, (le
nombre
de champs de chaque Table est différent).
Ce que je n'arrive pas à faire c'est sélectionner (pour les DELETER) tous
les champs de
Table1 qui n'ont pas été sélectionnés dans ma requete ...
ps: pour etre complet j'ai actuellement ChampB de table2 qui est de type
Lien hypertexte
si vraiment cela était un obstacle incontournable je le changerai en
champ texte
@+
Alain
"Michel Walsh" a écrit dans le
message
de news:Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
message
news:Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les enregistrements
pourlesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans table
2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
Bonjour Michel
Malheureusement ta suggestion ne me permet pas d'obtenir ce que je
souhaite.
En fait je sais sélectionner les enregistrements de Table1 qui
m'interressent avec la requete:
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
Comme tu le comprends je ne compare les valeurs que de 2 champs, (le
nombre
de champs de chaque Table est différent).
Ce que je n'arrive pas à faire c'est sélectionner (pour les DELETER) tous
les champs de
Table1 qui n'ont pas été sélectionnés dans ma requete ...
ps: pour etre complet j'ai actuellement ChampB de table2 qui est de type
Lien hypertexte
si vraiment cela était un obstacle incontournable je le changerai en
champ texte
@+
Alain
"Michel Walsh" <vanderghast@VirusAreFunnierThanSpam> a écrit dans le
message
de news:OHPyA9DuDHA.3496@TK2MSFTNGP11.phx.gbl...
Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" <alain.teyssedre-NoSpam@libertysurf.fr> wrote in
message
news:eCKfSdDuDHA.2520@TK2MSFTNGP10.phx.gbl...
Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les enregistrements
pour
lesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans table
2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
Bonjour Michel
Malheureusement ta suggestion ne me permet pas d'obtenir ce que je
souhaite.
En fait je sais sélectionner les enregistrements de Table1 qui
m'interressent avec la requete:
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
Comme tu le comprends je ne compare les valeurs que de 2 champs, (le
nombre
de champs de chaque Table est différent).
Ce que je n'arrive pas à faire c'est sélectionner (pour les DELETER) tous
les champs de
Table1 qui n'ont pas été sélectionnés dans ma requete ...
ps: pour etre complet j'ai actuellement ChampB de table2 qui est de type
Lien hypertexte
si vraiment cela était un obstacle incontournable je le changerai en
champ texte
@+
Alain
"Michel Walsh" a écrit dans le
message
de news:Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
message
news:Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les enregistrements
pourlesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans table
2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
Salut,
Si il s'agit d'avoir les enregistrements de Table1 qui ne sont pas
retournés
par
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
alors:
SELECT Table1.*
FROM Table2 RIGHT JOIN Table1
ON Table1.champ4 <> table2.champB
WHERE Table2.ChampB Is Null
devrait le faire.
J'ai simplement commencé par remonter la comparaison entre tables de la
clause WHERE au join, dans la clause ON:
SELECT Table1.*
FROM Table2 INNER JOIN Table1
ON Table1.champ4 <> table2.champB
Plus de clause WHERE, mais tout à fait équivalent au premier énoncé (par
contre, on perd la grille de design). La seule différence qui existe entre
un join externe et ce join interne c'est justement de conserver les
enregistrements qui n'apparaissent pas lors du join interne ! Ce sont CES
enregistrements qu'on veut pointer du doigt, et leur "signature" c'est
qu'ils ont des NULL dans les colonnes de la table "non préservée"...
Table2
dans notre cas. D'où la solution proposée.
Pour effacer, changer le SELECT par DELETE DISTINCTROW
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in message
news:%Bonjour Michel
Malheureusement ta suggestion ne me permet pas d'obtenir ce que je
souhaite.
En fait je sais sélectionner les enregistrements de Table1 qui
m'interressent avec la requete:
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
Comme tu le comprends je ne compare les valeurs que de 2 champs, (le
nombrede champs de chaque Table est différent).
Ce que je n'arrive pas à faire c'est sélectionner (pour les DELETER)
tous
les champs de
Table1 qui n'ont pas été sélectionnés dans ma requete ...
ps: pour etre complet j'ai actuellement ChampB de table2 qui est de type
Lien hypertexte
si vraiment cela était un obstacle incontournable je le changerai
en
champ texte
@+
Alain
"Michel Walsh" a écrit dans le
messagede news:Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
messagenews:Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les
enregistrements
pourlesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans
table
2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
Salut,
Si il s'agit d'avoir les enregistrements de Table1 qui ne sont pas
retournés
par
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
alors:
SELECT Table1.*
FROM Table2 RIGHT JOIN Table1
ON Table1.champ4 <> table2.champB
WHERE Table2.ChampB Is Null
devrait le faire.
J'ai simplement commencé par remonter la comparaison entre tables de la
clause WHERE au join, dans la clause ON:
SELECT Table1.*
FROM Table2 INNER JOIN Table1
ON Table1.champ4 <> table2.champB
Plus de clause WHERE, mais tout à fait équivalent au premier énoncé (par
contre, on perd la grille de design). La seule différence qui existe entre
un join externe et ce join interne c'est justement de conserver les
enregistrements qui n'apparaissent pas lors du join interne ! Ce sont CES
enregistrements qu'on veut pointer du doigt, et leur "signature" c'est
qu'ils ont des NULL dans les colonnes de la table "non préservée"...
Table2
dans notre cas. D'où la solution proposée.
Pour effacer, changer le SELECT par DELETE DISTINCTROW
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" <alain.teyssedre-NoSpam@libertysurf.fr> wrote in message
news:%2353kMNLuDHA.2304@TK2MSFTNGP12.phx.gbl...
Bonjour Michel
Malheureusement ta suggestion ne me permet pas d'obtenir ce que je
souhaite.
En fait je sais sélectionner les enregistrements de Table1 qui
m'interressent avec la requete:
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
Comme tu le comprends je ne compare les valeurs que de 2 champs, (le
nombre
de champs de chaque Table est différent).
Ce que je n'arrive pas à faire c'est sélectionner (pour les DELETER)
tous
les champs de
Table1 qui n'ont pas été sélectionnés dans ma requete ...
ps: pour etre complet j'ai actuellement ChampB de table2 qui est de type
Lien hypertexte
si vraiment cela était un obstacle incontournable je le changerai
en
champ texte
@+
Alain
"Michel Walsh" <vanderghast@VirusAreFunnierThanSpam> a écrit dans le
message
de news:OHPyA9DuDHA.3496@TK2MSFTNGP11.phx.gbl...
Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" <alain.teyssedre-NoSpam@libertysurf.fr> wrote in
message
news:eCKfSdDuDHA.2520@TK2MSFTNGP10.phx.gbl...
Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les
enregistrements
pour
lesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans
table
2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
Salut,
Si il s'agit d'avoir les enregistrements de Table1 qui ne sont pas
retournés
par
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
alors:
SELECT Table1.*
FROM Table2 RIGHT JOIN Table1
ON Table1.champ4 <> table2.champB
WHERE Table2.ChampB Is Null
devrait le faire.
J'ai simplement commencé par remonter la comparaison entre tables de la
clause WHERE au join, dans la clause ON:
SELECT Table1.*
FROM Table2 INNER JOIN Table1
ON Table1.champ4 <> table2.champB
Plus de clause WHERE, mais tout à fait équivalent au premier énoncé (par
contre, on perd la grille de design). La seule différence qui existe entre
un join externe et ce join interne c'est justement de conserver les
enregistrements qui n'apparaissent pas lors du join interne ! Ce sont CES
enregistrements qu'on veut pointer du doigt, et leur "signature" c'est
qu'ils ont des NULL dans les colonnes de la table "non préservée"...
Table2
dans notre cas. D'où la solution proposée.
Pour effacer, changer le SELECT par DELETE DISTINCTROW
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in message
news:%Bonjour Michel
Malheureusement ta suggestion ne me permet pas d'obtenir ce que je
souhaite.
En fait je sais sélectionner les enregistrements de Table1 qui
m'interressent avec la requete:
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
Comme tu le comprends je ne compare les valeurs que de 2 champs, (le
nombrede champs de chaque Table est différent).
Ce que je n'arrive pas à faire c'est sélectionner (pour les DELETER)
tous
les champs de
Table1 qui n'ont pas été sélectionnés dans ma requete ...
ps: pour etre complet j'ai actuellement ChampB de table2 qui est de type
Lien hypertexte
si vraiment cela était un obstacle incontournable je le changerai
en
champ texte
@+
Alain
"Michel Walsh" a écrit dans le
messagede news:Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
messagenews:Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les
enregistrements
pourlesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans
table
2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
Re-Bonjour
Bon ta requete Selection ==> super ça marche le résultat est OK
par contre moi aussi je croyais qu'il suffisait de remplacer SELECT par
DELETE DISTINCTROW .. et la patatras Erreur ..."Impossible de supprimer
dans les tables spécifiées !"
aurais tu une idée
Merci
Alain
"Michel Walsh" a écrit dans le
message
de news:Salut,
Si il s'agit d'avoir les enregistrements de Table1 qui ne sont pas
retournéspar
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
alors:
SELECT Table1.*
FROM Table2 RIGHT JOIN Table1
ON Table1.champ4 <> table2.champB
WHERE Table2.ChampB Is Null
devrait le faire.
J'ai simplement commencé par remonter la comparaison entre tables de la
clause WHERE au join, dans la clause ON:
SELECT Table1.*
FROM Table2 INNER JOIN Table1
ON Table1.champ4 <> table2.champB
Plus de clause WHERE, mais tout à fait équivalent au premier énoncé (par
contre, on perd la grille de design). La seule différence qui existe
entre
un join externe et ce join interne c'est justement de conserver les
enregistrements qui n'apparaissent pas lors du join interne ! Ce sont
CES
enregistrements qu'on veut pointer du doigt, et leur "signature" c'est
qu'ils ont des NULL dans les colonnes de la table "non préservée"...
Table2dans notre cas. D'où la solution proposée.
Pour effacer, changer le SELECT par DELETE DISTINCTROW
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
message
news:%Bonjour Michel
Malheureusement ta suggestion ne me permet pas d'obtenir ce que je
souhaite.
En fait je sais sélectionner les enregistrements de Table1 qui
m'interressent avec la requete:
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
Comme tu le comprends je ne compare les valeurs que de 2 champs, (le
nombrede champs de chaque Table est différent).
Ce que je n'arrive pas à faire c'est sélectionner (pour les DELETER)
tousles champs de
Table1 qui n'ont pas été sélectionnés dans ma requete ...
ps: pour etre complet j'ai actuellement ChampB de table2 qui est de
type
Lien hypertexte
si vraiment cela était un obstacle incontournable je le changerai
enchamp texte
@+
Alain
"Michel Walsh" a écrit dans le
messagede news:Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
messagenews:Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les
enregistrementspourlesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans
table2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
Re-Bonjour
Bon ta requete Selection ==> super ça marche le résultat est OK
par contre moi aussi je croyais qu'il suffisait de remplacer SELECT par
DELETE DISTINCTROW .. et la patatras Erreur ..."Impossible de supprimer
dans les tables spécifiées !"
aurais tu une idée
Merci
Alain
"Michel Walsh" <vanderghast@VirusAreFunnierThanSpam> a écrit dans le
message
de news:uThCkbMuDHA.3532@TK2MSFTNGP11.phx.gbl...
Salut,
Si il s'agit d'avoir les enregistrements de Table1 qui ne sont pas
retournés
par
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
alors:
SELECT Table1.*
FROM Table2 RIGHT JOIN Table1
ON Table1.champ4 <> table2.champB
WHERE Table2.ChampB Is Null
devrait le faire.
J'ai simplement commencé par remonter la comparaison entre tables de la
clause WHERE au join, dans la clause ON:
SELECT Table1.*
FROM Table2 INNER JOIN Table1
ON Table1.champ4 <> table2.champB
Plus de clause WHERE, mais tout à fait équivalent au premier énoncé (par
contre, on perd la grille de design). La seule différence qui existe
entre
un join externe et ce join interne c'est justement de conserver les
enregistrements qui n'apparaissent pas lors du join interne ! Ce sont
CES
enregistrements qu'on veut pointer du doigt, et leur "signature" c'est
qu'ils ont des NULL dans les colonnes de la table "non préservée"...
Table2
dans notre cas. D'où la solution proposée.
Pour effacer, changer le SELECT par DELETE DISTINCTROW
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" <alain.teyssedre-NoSpam@libertysurf.fr> wrote in
message
news:%2353kMNLuDHA.2304@TK2MSFTNGP12.phx.gbl...
Bonjour Michel
Malheureusement ta suggestion ne me permet pas d'obtenir ce que je
souhaite.
En fait je sais sélectionner les enregistrements de Table1 qui
m'interressent avec la requete:
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
Comme tu le comprends je ne compare les valeurs que de 2 champs, (le
nombre
de champs de chaque Table est différent).
Ce que je n'arrive pas à faire c'est sélectionner (pour les DELETER)
tous
les champs de
Table1 qui n'ont pas été sélectionnés dans ma requete ...
ps: pour etre complet j'ai actuellement ChampB de table2 qui est de
type
Lien hypertexte
si vraiment cela était un obstacle incontournable je le changerai
en
champ texte
@+
Alain
"Michel Walsh" <vanderghast@VirusAreFunnierThanSpam> a écrit dans le
message
de news:OHPyA9DuDHA.3496@TK2MSFTNGP11.phx.gbl...
Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" <alain.teyssedre-NoSpam@libertysurf.fr> wrote in
message
news:eCKfSdDuDHA.2520@TK2MSFTNGP10.phx.gbl...
Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les
enregistrements
pour
lesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans
table
2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
Re-Bonjour
Bon ta requete Selection ==> super ça marche le résultat est OK
par contre moi aussi je croyais qu'il suffisait de remplacer SELECT par
DELETE DISTINCTROW .. et la patatras Erreur ..."Impossible de supprimer
dans les tables spécifiées !"
aurais tu une idée
Merci
Alain
"Michel Walsh" a écrit dans le
message
de news:Salut,
Si il s'agit d'avoir les enregistrements de Table1 qui ne sont pas
retournéspar
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
alors:
SELECT Table1.*
FROM Table2 RIGHT JOIN Table1
ON Table1.champ4 <> table2.champB
WHERE Table2.ChampB Is Null
devrait le faire.
J'ai simplement commencé par remonter la comparaison entre tables de la
clause WHERE au join, dans la clause ON:
SELECT Table1.*
FROM Table2 INNER JOIN Table1
ON Table1.champ4 <> table2.champB
Plus de clause WHERE, mais tout à fait équivalent au premier énoncé (par
contre, on perd la grille de design). La seule différence qui existe
entre
un join externe et ce join interne c'est justement de conserver les
enregistrements qui n'apparaissent pas lors du join interne ! Ce sont
CES
enregistrements qu'on veut pointer du doigt, et leur "signature" c'est
qu'ils ont des NULL dans les colonnes de la table "non préservée"...
Table2dans notre cas. D'où la solution proposée.
Pour effacer, changer le SELECT par DELETE DISTINCTROW
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
message
news:%Bonjour Michel
Malheureusement ta suggestion ne me permet pas d'obtenir ce que je
souhaite.
En fait je sais sélectionner les enregistrements de Table1 qui
m'interressent avec la requete:
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
Comme tu le comprends je ne compare les valeurs que de 2 champs, (le
nombrede champs de chaque Table est différent).
Ce que je n'arrive pas à faire c'est sélectionner (pour les DELETER)
tousles champs de
Table1 qui n'ont pas été sélectionnés dans ma requete ...
ps: pour etre complet j'ai actuellement ChampB de table2 qui est de
type
Lien hypertexte
si vraiment cela était un obstacle incontournable je le changerai
enchamp texte
@+
Alain
"Michel Walsh" a écrit dans le
messagede news:Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
messagenews:Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les
enregistrementspourlesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans
table2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
Re-Bonjour
Bon ta requete Selection ==> super ça marche le résultat est OK
par contre moi aussi je croyais qu'il suffisait de remplacer SELECT par
DELETE DISTINCTROW .. et la patatras Erreur ..."Impossible de supprimer
dans les tables spécifiées !"
aurais tu une idée
Merci
Alain
"Michel Walsh" a écrit dans le
message
de news:Salut,
Si il s'agit d'avoir les enregistrements de Table1 qui ne sont pas
retournéspar
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
alors:
SELECT Table1.*
FROM Table2 RIGHT JOIN Table1
ON Table1.champ4 <> table2.champB
WHERE Table2.ChampB Is Null
devrait le faire.
J'ai simplement commencé par remonter la comparaison entre tables de la
clause WHERE au join, dans la clause ON:
SELECT Table1.*
FROM Table2 INNER JOIN Table1
ON Table1.champ4 <> table2.champB
Plus de clause WHERE, mais tout à fait équivalent au premier énoncé (par
contre, on perd la grille de design). La seule différence qui existe
entre
un join externe et ce join interne c'est justement de conserver les
enregistrements qui n'apparaissent pas lors du join interne ! Ce sont
CES
enregistrements qu'on veut pointer du doigt, et leur "signature" c'est
qu'ils ont des NULL dans les colonnes de la table "non préservée"...
Table2dans notre cas. D'où la solution proposée.
Pour effacer, changer le SELECT par DELETE DISTINCTROW
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
message
news:%Bonjour Michel
Malheureusement ta suggestion ne me permet pas d'obtenir ce que je
souhaite.
En fait je sais sélectionner les enregistrements de Table1 qui
m'interressent avec la requete:
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
Comme tu le comprends je ne compare les valeurs que de 2 champs, (le
nombrede champs de chaque Table est différent).
Ce que je n'arrive pas à faire c'est sélectionner (pour les DELETER)
tousles champs de
Table1 qui n'ont pas été sélectionnés dans ma requete ...
ps: pour etre complet j'ai actuellement ChampB de table2 qui est de
type
Lien hypertexte
si vraiment cela était un obstacle incontournable je le changerai
enchamp texte
@+
Alain
"Michel Walsh" a écrit dans le
messagede news:Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
messagenews:Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les
enregistrementspourlesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans
table2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
Re-Bonjour
Bon ta requete Selection ==> super ça marche le résultat est OK
par contre moi aussi je croyais qu'il suffisait de remplacer SELECT par
DELETE DISTINCTROW .. et la patatras Erreur ..."Impossible de supprimer
dans les tables spécifiées !"
aurais tu une idée
Merci
Alain
"Michel Walsh" <vanderghast@VirusAreFunnierThanSpam> a écrit dans le
message
de news:uThCkbMuDHA.3532@TK2MSFTNGP11.phx.gbl...
Salut,
Si il s'agit d'avoir les enregistrements de Table1 qui ne sont pas
retournés
par
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
alors:
SELECT Table1.*
FROM Table2 RIGHT JOIN Table1
ON Table1.champ4 <> table2.champB
WHERE Table2.ChampB Is Null
devrait le faire.
J'ai simplement commencé par remonter la comparaison entre tables de la
clause WHERE au join, dans la clause ON:
SELECT Table1.*
FROM Table2 INNER JOIN Table1
ON Table1.champ4 <> table2.champB
Plus de clause WHERE, mais tout à fait équivalent au premier énoncé (par
contre, on perd la grille de design). La seule différence qui existe
entre
un join externe et ce join interne c'est justement de conserver les
enregistrements qui n'apparaissent pas lors du join interne ! Ce sont
CES
enregistrements qu'on veut pointer du doigt, et leur "signature" c'est
qu'ils ont des NULL dans les colonnes de la table "non préservée"...
Table2
dans notre cas. D'où la solution proposée.
Pour effacer, changer le SELECT par DELETE DISTINCTROW
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" <alain.teyssedre-NoSpam@libertysurf.fr> wrote in
message
news:%2353kMNLuDHA.2304@TK2MSFTNGP12.phx.gbl...
Bonjour Michel
Malheureusement ta suggestion ne me permet pas d'obtenir ce que je
souhaite.
En fait je sais sélectionner les enregistrements de Table1 qui
m'interressent avec la requete:
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
Comme tu le comprends je ne compare les valeurs que de 2 champs, (le
nombre
de champs de chaque Table est différent).
Ce que je n'arrive pas à faire c'est sélectionner (pour les DELETER)
tous
les champs de
Table1 qui n'ont pas été sélectionnés dans ma requete ...
ps: pour etre complet j'ai actuellement ChampB de table2 qui est de
type
Lien hypertexte
si vraiment cela était un obstacle incontournable je le changerai
en
champ texte
@+
Alain
"Michel Walsh" <vanderghast@VirusAreFunnierThanSpam> a écrit dans le
message
de news:OHPyA9DuDHA.3496@TK2MSFTNGP11.phx.gbl...
Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" <alain.teyssedre-NoSpam@libertysurf.fr> wrote in
message
news:eCKfSdDuDHA.2520@TK2MSFTNGP10.phx.gbl...
Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les
enregistrements
pour
lesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans
table
2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
Re-Bonjour
Bon ta requete Selection ==> super ça marche le résultat est OK
par contre moi aussi je croyais qu'il suffisait de remplacer SELECT par
DELETE DISTINCTROW .. et la patatras Erreur ..."Impossible de supprimer
dans les tables spécifiées !"
aurais tu une idée
Merci
Alain
"Michel Walsh" a écrit dans le
message
de news:Salut,
Si il s'agit d'avoir les enregistrements de Table1 qui ne sont pas
retournéspar
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
alors:
SELECT Table1.*
FROM Table2 RIGHT JOIN Table1
ON Table1.champ4 <> table2.champB
WHERE Table2.ChampB Is Null
devrait le faire.
J'ai simplement commencé par remonter la comparaison entre tables de la
clause WHERE au join, dans la clause ON:
SELECT Table1.*
FROM Table2 INNER JOIN Table1
ON Table1.champ4 <> table2.champB
Plus de clause WHERE, mais tout à fait équivalent au premier énoncé (par
contre, on perd la grille de design). La seule différence qui existe
entre
un join externe et ce join interne c'est justement de conserver les
enregistrements qui n'apparaissent pas lors du join interne ! Ce sont
CES
enregistrements qu'on veut pointer du doigt, et leur "signature" c'est
qu'ils ont des NULL dans les colonnes de la table "non préservée"...
Table2dans notre cas. D'où la solution proposée.
Pour effacer, changer le SELECT par DELETE DISTINCTROW
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
message
news:%Bonjour Michel
Malheureusement ta suggestion ne me permet pas d'obtenir ce que je
souhaite.
En fait je sais sélectionner les enregistrements de Table1 qui
m'interressent avec la requete:
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
Comme tu le comprends je ne compare les valeurs que de 2 champs, (le
nombrede champs de chaque Table est différent).
Ce que je n'arrive pas à faire c'est sélectionner (pour les DELETER)
tousles champs de
Table1 qui n'ont pas été sélectionnés dans ma requete ...
ps: pour etre complet j'ai actuellement ChampB de table2 qui est de
type
Lien hypertexte
si vraiment cela était un obstacle incontournable je le changerai
enchamp texte
@+
Alain
"Michel Walsh" a écrit dans le
messagede news:Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
messagenews:Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les
enregistrementspourlesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans
table2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
Intéressant...
Cette solution de rechange devrait faire l'affaire...
SELECT Table1.*
FROM Table1
WHERE Champ4 <> ALL( SELECT ChampB FROM table2)
ou, évidemment
DELETE Table1.*
FROM Table1
WHERE Champ4 <> ALL( SELECT ChampB FROM table2)
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in message
news:Re-Bonjour
Bon ta requete Selection ==> super ça marche le résultat est OK
par contre moi aussi je croyais qu'il suffisait de remplacer SELECT par
DELETE DISTINCTROW .. et la patatras Erreur ..."Impossible de supprimer
dans les tables spécifiées !"
aurais tu une idée
Merci
Alain
"Michel Walsh" a écrit dans le
messagede news:Salut,
Si il s'agit d'avoir les enregistrements de Table1 qui ne sont pas
retournéspar
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
alors:
SELECT Table1.*
FROM Table2 RIGHT JOIN Table1
ON Table1.champ4 <> table2.champB
WHERE Table2.ChampB Is Null
devrait le faire.
J'ai simplement commencé par remonter la comparaison entre tables de
la
clause WHERE au join, dans la clause ON:
SELECT Table1.*
FROM Table2 INNER JOIN Table1
ON Table1.champ4 <> table2.champB
Plus de clause WHERE, mais tout à fait équivalent au premier énoncé
(par
contre, on perd la grille de design). La seule différence qui existe
entreun join externe et ce join interne c'est justement de conserver les
enregistrements qui n'apparaissent pas lors du join interne ! Ce sont
CESenregistrements qu'on veut pointer du doigt, et leur "signature" c'est
qu'ils ont des NULL dans les colonnes de la table "non préservée"...
Table2dans notre cas. D'où la solution proposée.
Pour effacer, changer le SELECT par DELETE DISTINCTROW
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
messagenews:%Bonjour Michel
Malheureusement ta suggestion ne me permet pas d'obtenir ce que je
souhaite.
En fait je sais sélectionner les enregistrements de Table1 qui
m'interressent avec la requete:
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
Comme tu le comprends je ne compare les valeurs que de 2 champs, (le
nombrede champs de chaque Table est différent).
Ce que je n'arrive pas à faire c'est sélectionner (pour les DELETER)
tousles champs de
Table1 qui n'ont pas été sélectionnés dans ma requete ...
ps: pour etre complet j'ai actuellement ChampB de table2 qui est de
typeLien hypertexte
si vraiment cela était un obstacle incontournable je le
changerai
enchamp texte
@+
Alain
"Michel Walsh" a écrit dans le
messagede news:Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
messagenews:Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les
enregistrementspourlesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans
table2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
Intéressant...
Cette solution de rechange devrait faire l'affaire...
SELECT Table1.*
FROM Table1
WHERE Champ4 <> ALL( SELECT ChampB FROM table2)
ou, évidemment
DELETE Table1.*
FROM Table1
WHERE Champ4 <> ALL( SELECT ChampB FROM table2)
Vanderghast, Access MVP
"Alain TEYSSEDRE" <alain.teyssedre-NoSpam@libertysurf.fr> wrote in message
news:utdNRlMuDHA.556@TK2MSFTNGP11.phx.gbl...
Re-Bonjour
Bon ta requete Selection ==> super ça marche le résultat est OK
par contre moi aussi je croyais qu'il suffisait de remplacer SELECT par
DELETE DISTINCTROW .. et la patatras Erreur ..."Impossible de supprimer
dans les tables spécifiées !"
aurais tu une idée
Merci
Alain
"Michel Walsh" <vanderghast@VirusAreFunnierThanSpam> a écrit dans le
message
de news:uThCkbMuDHA.3532@TK2MSFTNGP11.phx.gbl...
Salut,
Si il s'agit d'avoir les enregistrements de Table1 qui ne sont pas
retournés
par
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
alors:
SELECT Table1.*
FROM Table2 RIGHT JOIN Table1
ON Table1.champ4 <> table2.champB
WHERE Table2.ChampB Is Null
devrait le faire.
J'ai simplement commencé par remonter la comparaison entre tables de
la
clause WHERE au join, dans la clause ON:
SELECT Table1.*
FROM Table2 INNER JOIN Table1
ON Table1.champ4 <> table2.champB
Plus de clause WHERE, mais tout à fait équivalent au premier énoncé
(par
contre, on perd la grille de design). La seule différence qui existe
entre
un join externe et ce join interne c'est justement de conserver les
enregistrements qui n'apparaissent pas lors du join interne ! Ce sont
CES
enregistrements qu'on veut pointer du doigt, et leur "signature" c'est
qu'ils ont des NULL dans les colonnes de la table "non préservée"...
Table2
dans notre cas. D'où la solution proposée.
Pour effacer, changer le SELECT par DELETE DISTINCTROW
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" <alain.teyssedre-NoSpam@libertysurf.fr> wrote in
message
news:%2353kMNLuDHA.2304@TK2MSFTNGP12.phx.gbl...
Bonjour Michel
Malheureusement ta suggestion ne me permet pas d'obtenir ce que je
souhaite.
En fait je sais sélectionner les enregistrements de Table1 qui
m'interressent avec la requete:
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
Comme tu le comprends je ne compare les valeurs que de 2 champs, (le
nombre
de champs de chaque Table est différent).
Ce que je n'arrive pas à faire c'est sélectionner (pour les DELETER)
tous
les champs de
Table1 qui n'ont pas été sélectionnés dans ma requete ...
ps: pour etre complet j'ai actuellement ChampB de table2 qui est de
type
Lien hypertexte
si vraiment cela était un obstacle incontournable je le
changerai
en
champ texte
@+
Alain
"Michel Walsh" <vanderghast@VirusAreFunnierThanSpam> a écrit dans le
message
de news:OHPyA9DuDHA.3496@TK2MSFTNGP11.phx.gbl...
Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" <alain.teyssedre-NoSpam@libertysurf.fr> wrote in
message
news:eCKfSdDuDHA.2520@TK2MSFTNGP10.phx.gbl...
Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les
enregistrements
pour
lesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans
table
2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
Intéressant...
Cette solution de rechange devrait faire l'affaire...
SELECT Table1.*
FROM Table1
WHERE Champ4 <> ALL( SELECT ChampB FROM table2)
ou, évidemment
DELETE Table1.*
FROM Table1
WHERE Champ4 <> ALL( SELECT ChampB FROM table2)
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in message
news:Re-Bonjour
Bon ta requete Selection ==> super ça marche le résultat est OK
par contre moi aussi je croyais qu'il suffisait de remplacer SELECT par
DELETE DISTINCTROW .. et la patatras Erreur ..."Impossible de supprimer
dans les tables spécifiées !"
aurais tu une idée
Merci
Alain
"Michel Walsh" a écrit dans le
messagede news:Salut,
Si il s'agit d'avoir les enregistrements de Table1 qui ne sont pas
retournéspar
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
alors:
SELECT Table1.*
FROM Table2 RIGHT JOIN Table1
ON Table1.champ4 <> table2.champB
WHERE Table2.ChampB Is Null
devrait le faire.
J'ai simplement commencé par remonter la comparaison entre tables de
la
clause WHERE au join, dans la clause ON:
SELECT Table1.*
FROM Table2 INNER JOIN Table1
ON Table1.champ4 <> table2.champB
Plus de clause WHERE, mais tout à fait équivalent au premier énoncé
(par
contre, on perd la grille de design). La seule différence qui existe
entreun join externe et ce join interne c'est justement de conserver les
enregistrements qui n'apparaissent pas lors du join interne ! Ce sont
CESenregistrements qu'on veut pointer du doigt, et leur "signature" c'est
qu'ils ont des NULL dans les colonnes de la table "non préservée"...
Table2dans notre cas. D'où la solution proposée.
Pour effacer, changer le SELECT par DELETE DISTINCTROW
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
messagenews:%Bonjour Michel
Malheureusement ta suggestion ne me permet pas d'obtenir ce que je
souhaite.
En fait je sais sélectionner les enregistrements de Table1 qui
m'interressent avec la requete:
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
Comme tu le comprends je ne compare les valeurs que de 2 champs, (le
nombrede champs de chaque Table est différent).
Ce que je n'arrive pas à faire c'est sélectionner (pour les DELETER)
tousles champs de
Table1 qui n'ont pas été sélectionnés dans ma requete ...
ps: pour etre complet j'ai actuellement ChampB de table2 qui est de
typeLien hypertexte
si vraiment cela était un obstacle incontournable je le
changerai
enchamp texte
@+
Alain
"Michel Walsh" a écrit dans le
messagede news:Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
messagenews:Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les
enregistrementspourlesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans
table2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
En fait, si les enregistrement de table1 sous Champ1 ont les valeurs { 1,
2, 3 }
et table2.ChampB les valeurs { 1, 2, 4 }
alors,
SELECT Champ1, ChampB
FROM Table1, Table2
WHERE table1.Champ1 <>table2.ChampB
donne
1 2
1 4
2 1
2 4
3 1
3 2
3 4
toutes les lignes de champ1 apparaissent dans champB. Seules les
combinaisons (1 , 1) et ( 2, 2 ) ne furent pas retenues. Il faut
effacer
1 et 2 de table1 ? Si c'est bien cela, alors un simple IN est à
utiliser
SELECT Champ1
FROM table1
WHERE Camp1 = ANY( SELECT ChampB FROM table2)
( = ANY peut être remplacé par IN )
Le <> ALL, sa négation, NOT IN si on préfère, effacera l'enregistrement
ayant 3 comme valeur de Champ1.
Donc, pour simplifier, vérifier si on désire
SELECT Champ1
FROM table1
WHERE Camp1 IN( SELECT ChampB FROM table2)
ou si on désire
SELECT Champ1
FROM table1
WHERE NOT Camp1 IN( SELECT ChampB FROM table2)
tout simplement... et utiliser un DELETE par la suite (qui devrait
fonctionner).
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in message
news:Re-Bonjour
Bon ta requete Selection ==> super ça marche le résultat est OK
par contre moi aussi je croyais qu'il suffisait de remplacer SELECT par
DELETE DISTINCTROW .. et la patatras Erreur ..."Impossible de supprimer
dans les tables spécifiées !"
aurais tu une idée
Merci
Alain
"Michel Walsh" a écrit dans le
messagede news:Salut,
Si il s'agit d'avoir les enregistrements de Table1 qui ne sont pas
retournéspar
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
alors:
SELECT Table1.*
FROM Table2 RIGHT JOIN Table1
ON Table1.champ4 <> table2.champB
WHERE Table2.ChampB Is Null
devrait le faire.
J'ai simplement commencé par remonter la comparaison entre tables de
la
clause WHERE au join, dans la clause ON:
SELECT Table1.*
FROM Table2 INNER JOIN Table1
ON Table1.champ4 <> table2.champB
Plus de clause WHERE, mais tout à fait équivalent au premier énoncé
(par
contre, on perd la grille de design). La seule différence qui existe
entreun join externe et ce join interne c'est justement de conserver les
enregistrements qui n'apparaissent pas lors du join interne ! Ce sont
CESenregistrements qu'on veut pointer du doigt, et leur "signature" c'est
qu'ils ont des NULL dans les colonnes de la table "non préservée"...
Table2dans notre cas. D'où la solution proposée.
Pour effacer, changer le SELECT par DELETE DISTINCTROW
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
messagenews:%Bonjour Michel
Malheureusement ta suggestion ne me permet pas d'obtenir ce que je
souhaite.
En fait je sais sélectionner les enregistrements de Table1 qui
m'interressent avec la requete:
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
Comme tu le comprends je ne compare les valeurs que de 2 champs, (le
nombrede champs de chaque Table est différent).
Ce que je n'arrive pas à faire c'est sélectionner (pour les DELETER)
tousles champs de
Table1 qui n'ont pas été sélectionnés dans ma requete ...
ps: pour etre complet j'ai actuellement ChampB de table2 qui est de
typeLien hypertexte
si vraiment cela était un obstacle incontournable je le
changerai
enchamp texte
@+
Alain
"Michel Walsh" a écrit dans le
messagede news:Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
messagenews:Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les
enregistrementspourlesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans
table2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
En fait, si les enregistrement de table1 sous Champ1 ont les valeurs { 1,
2, 3 }
et table2.ChampB les valeurs { 1, 2, 4 }
alors,
SELECT Champ1, ChampB
FROM Table1, Table2
WHERE table1.Champ1 <>table2.ChampB
donne
1 2
1 4
2 1
2 4
3 1
3 2
3 4
toutes les lignes de champ1 apparaissent dans champB. Seules les
combinaisons (1 , 1) et ( 2, 2 ) ne furent pas retenues. Il faut
effacer
1 et 2 de table1 ? Si c'est bien cela, alors un simple IN est à
utiliser
SELECT Champ1
FROM table1
WHERE Camp1 = ANY( SELECT ChampB FROM table2)
( = ANY peut être remplacé par IN )
Le <> ALL, sa négation, NOT IN si on préfère, effacera l'enregistrement
ayant 3 comme valeur de Champ1.
Donc, pour simplifier, vérifier si on désire
SELECT Champ1
FROM table1
WHERE Camp1 IN( SELECT ChampB FROM table2)
ou si on désire
SELECT Champ1
FROM table1
WHERE NOT Camp1 IN( SELECT ChampB FROM table2)
tout simplement... et utiliser un DELETE par la suite (qui devrait
fonctionner).
Vanderghast, Access MVP
"Alain TEYSSEDRE" <alain.teyssedre-NoSpam@libertysurf.fr> wrote in message
news:utdNRlMuDHA.556@TK2MSFTNGP11.phx.gbl...
Re-Bonjour
Bon ta requete Selection ==> super ça marche le résultat est OK
par contre moi aussi je croyais qu'il suffisait de remplacer SELECT par
DELETE DISTINCTROW .. et la patatras Erreur ..."Impossible de supprimer
dans les tables spécifiées !"
aurais tu une idée
Merci
Alain
"Michel Walsh" <vanderghast@VirusAreFunnierThanSpam> a écrit dans le
message
de news:uThCkbMuDHA.3532@TK2MSFTNGP11.phx.gbl...
Salut,
Si il s'agit d'avoir les enregistrements de Table1 qui ne sont pas
retournés
par
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
alors:
SELECT Table1.*
FROM Table2 RIGHT JOIN Table1
ON Table1.champ4 <> table2.champB
WHERE Table2.ChampB Is Null
devrait le faire.
J'ai simplement commencé par remonter la comparaison entre tables de
la
clause WHERE au join, dans la clause ON:
SELECT Table1.*
FROM Table2 INNER JOIN Table1
ON Table1.champ4 <> table2.champB
Plus de clause WHERE, mais tout à fait équivalent au premier énoncé
(par
contre, on perd la grille de design). La seule différence qui existe
entre
un join externe et ce join interne c'est justement de conserver les
enregistrements qui n'apparaissent pas lors du join interne ! Ce sont
CES
enregistrements qu'on veut pointer du doigt, et leur "signature" c'est
qu'ils ont des NULL dans les colonnes de la table "non préservée"...
Table2
dans notre cas. D'où la solution proposée.
Pour effacer, changer le SELECT par DELETE DISTINCTROW
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" <alain.teyssedre-NoSpam@libertysurf.fr> wrote in
message
news:%2353kMNLuDHA.2304@TK2MSFTNGP12.phx.gbl...
Bonjour Michel
Malheureusement ta suggestion ne me permet pas d'obtenir ce que je
souhaite.
En fait je sais sélectionner les enregistrements de Table1 qui
m'interressent avec la requete:
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
Comme tu le comprends je ne compare les valeurs que de 2 champs, (le
nombre
de champs de chaque Table est différent).
Ce que je n'arrive pas à faire c'est sélectionner (pour les DELETER)
tous
les champs de
Table1 qui n'ont pas été sélectionnés dans ma requete ...
ps: pour etre complet j'ai actuellement ChampB de table2 qui est de
type
Lien hypertexte
si vraiment cela était un obstacle incontournable je le
changerai
en
champ texte
@+
Alain
"Michel Walsh" <vanderghast@VirusAreFunnierThanSpam> a écrit dans le
message
de news:OHPyA9DuDHA.3496@TK2MSFTNGP11.phx.gbl...
Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" <alain.teyssedre-NoSpam@libertysurf.fr> wrote in
message
news:eCKfSdDuDHA.2520@TK2MSFTNGP10.phx.gbl...
Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les
enregistrements
pour
lesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans
table
2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
En fait, si les enregistrement de table1 sous Champ1 ont les valeurs { 1,
2, 3 }
et table2.ChampB les valeurs { 1, 2, 4 }
alors,
SELECT Champ1, ChampB
FROM Table1, Table2
WHERE table1.Champ1 <>table2.ChampB
donne
1 2
1 4
2 1
2 4
3 1
3 2
3 4
toutes les lignes de champ1 apparaissent dans champB. Seules les
combinaisons (1 , 1) et ( 2, 2 ) ne furent pas retenues. Il faut
effacer
1 et 2 de table1 ? Si c'est bien cela, alors un simple IN est à
utiliser
SELECT Champ1
FROM table1
WHERE Camp1 = ANY( SELECT ChampB FROM table2)
( = ANY peut être remplacé par IN )
Le <> ALL, sa négation, NOT IN si on préfère, effacera l'enregistrement
ayant 3 comme valeur de Champ1.
Donc, pour simplifier, vérifier si on désire
SELECT Champ1
FROM table1
WHERE Camp1 IN( SELECT ChampB FROM table2)
ou si on désire
SELECT Champ1
FROM table1
WHERE NOT Camp1 IN( SELECT ChampB FROM table2)
tout simplement... et utiliser un DELETE par la suite (qui devrait
fonctionner).
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in message
news:Re-Bonjour
Bon ta requete Selection ==> super ça marche le résultat est OK
par contre moi aussi je croyais qu'il suffisait de remplacer SELECT par
DELETE DISTINCTROW .. et la patatras Erreur ..."Impossible de supprimer
dans les tables spécifiées !"
aurais tu une idée
Merci
Alain
"Michel Walsh" a écrit dans le
messagede news:Salut,
Si il s'agit d'avoir les enregistrements de Table1 qui ne sont pas
retournéspar
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
alors:
SELECT Table1.*
FROM Table2 RIGHT JOIN Table1
ON Table1.champ4 <> table2.champB
WHERE Table2.ChampB Is Null
devrait le faire.
J'ai simplement commencé par remonter la comparaison entre tables de
la
clause WHERE au join, dans la clause ON:
SELECT Table1.*
FROM Table2 INNER JOIN Table1
ON Table1.champ4 <> table2.champB
Plus de clause WHERE, mais tout à fait équivalent au premier énoncé
(par
contre, on perd la grille de design). La seule différence qui existe
entreun join externe et ce join interne c'est justement de conserver les
enregistrements qui n'apparaissent pas lors du join interne ! Ce sont
CESenregistrements qu'on veut pointer du doigt, et leur "signature" c'est
qu'ils ont des NULL dans les colonnes de la table "non préservée"...
Table2dans notre cas. D'où la solution proposée.
Pour effacer, changer le SELECT par DELETE DISTINCTROW
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
messagenews:%Bonjour Michel
Malheureusement ta suggestion ne me permet pas d'obtenir ce que je
souhaite.
En fait je sais sélectionner les enregistrements de Table1 qui
m'interressent avec la requete:
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
Comme tu le comprends je ne compare les valeurs que de 2 champs, (le
nombrede champs de chaque Table est différent).
Ce que je n'arrive pas à faire c'est sélectionner (pour les DELETER)
tousles champs de
Table1 qui n'ont pas été sélectionnés dans ma requete ...
ps: pour etre complet j'ai actuellement ChampB de table2 qui est de
typeLien hypertexte
si vraiment cela était un obstacle incontournable je le
changerai
enchamp texte
@+
Alain
"Michel Walsh" a écrit dans le
messagede news:Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
messagenews:Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les
enregistrementspourlesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC dans
table2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
helas Trois fois Helas la requete est toujour vide ...
Si les valeurs de Champ1 de Table 1 sont
:Toto,Tata,Tutu,Titi,Toto,Tutu,Tata,Tutu, Tittii => total de 9
enregistrements
et les valeurs de ChampB de Table 2 sont : Zaza,Zozo,Toto,Zazi,Tutu =>
total
de 5 enregistrements
alors la requete doit permettre de DELETER ou (retourner) tous les
enregistrements
de tous les champs de Table1 dont on retrouve une valeur dans Table2 (il
s'agit des 5 enregistrements Toto,Tutu,Toto,Tutu, Tutu)
@+
Alain
helas Trois fois Helas la requete est toujour vide ...
Si les valeurs de Champ1 de Table 1 sont
:Toto,Tata,Tutu,Titi,Toto,Tutu,Tata,Tutu, Tittii => total de 9
enregistrements
et les valeurs de ChampB de Table 2 sont : Zaza,Zozo,Toto,Zazi,Tutu =>
total
de 5 enregistrements
alors la requete doit permettre de DELETER ou (retourner) tous les
enregistrements
de tous les champs de Table1 dont on retrouve une valeur dans Table2 (il
s'agit des 5 enregistrements Toto,Tutu,Toto,Tutu, Tutu)
@+
Alain
helas Trois fois Helas la requete est toujour vide ...
Si les valeurs de Champ1 de Table 1 sont
:Toto,Tata,Tutu,Titi,Toto,Tutu,Tata,Tutu, Tittii => total de 9
enregistrements
et les valeurs de ChampB de Table 2 sont : Zaza,Zozo,Toto,Zazi,Tutu =>
total
de 5 enregistrements
alors la requete doit permettre de DELETER ou (retourner) tous les
enregistrements
de tous les champs de Table1 dont on retrouve une valeur dans Table2 (il
s'agit des 5 enregistrements Toto,Tutu,Toto,Tutu, Tutu)
@+
Alain
helas Trois fois Helas la requete est toujour vide ...
Si les valeurs de Champ1 de Table 1 sont
:Toto,Tata,Tutu,Titi,Toto,Tutu,Tata,Tutu, Tittii => total de 9
enregistrements
et les valeurs de ChampB de Table 2 sont : Zaza,Zozo,Toto,Zazi,Tutu =>
total
de 5 enregistrements
alors la requete doit permettre de DELETER ou (retourner) tous les
enregistrements
de tous les champs de Table1 dont on retrouve une valeur dans Table2 (il
s'agit des 5 enregistrements Toto,Tutu,Toto,Tutu, Tutu)
@+
Alain
En fait, si les enregistrement de table1 sous Champ1 ont les valeurs
{ 1,
2, 3 }
et table2.ChampB les valeurs { 1, 2, 4 }
alors,
SELECT Champ1, ChampB
FROM Table1, Table2
WHERE table1.Champ1 <>table2.ChampB
donne
1 2
1 4
2 1
2 4
3 1
3 2
3 4
toutes les lignes de champ1 apparaissent dans champB. Seules les
combinaisons (1 , 1) et ( 2, 2 ) ne furent pas retenues. Il faut
effacer1 et 2 de table1 ? Si c'est bien cela, alors un simple IN est à
utiliser
SELECT Champ1
FROM table1
WHERE Camp1 = ANY( SELECT ChampB FROM table2)
( = ANY peut être remplacé par IN )
Le <> ALL, sa négation, NOT IN si on préfère, effacera l'enregistrement
ayant 3 comme valeur de Champ1.
Donc, pour simplifier, vérifier si on désire
SELECT Champ1
FROM table1
WHERE Camp1 IN( SELECT ChampB FROM table2)
ou si on désire
SELECT Champ1
FROM table1
WHERE NOT Camp1 IN( SELECT ChampB FROM table2)
tout simplement... et utiliser un DELETE par la suite (qui devrait
fonctionner).
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
message
news:Re-Bonjour
Bon ta requete Selection ==> super ça marche le résultat est OK
par contre moi aussi je croyais qu'il suffisait de remplacer SELECT
par
DELETE DISTINCTROW .. et la patatras Erreur ..."Impossible de
supprimer
dans les tables spécifiées !"
aurais tu une idée
Merci
Alain
"Michel Walsh" a écrit dans le
messagede news:Salut,
Si il s'agit d'avoir les enregistrements de Table1 qui ne sont pas
retournéspar
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
alors:
SELECT Table1.*
FROM Table2 RIGHT JOIN Table1
ON Table1.champ4 <> table2.champB
WHERE Table2.ChampB Is Null
devrait le faire.
J'ai simplement commencé par remonter la comparaison entre tables de
laclause WHERE au join, dans la clause ON:
SELECT Table1.*
FROM Table2 INNER JOIN Table1
ON Table1.champ4 <> table2.champB
Plus de clause WHERE, mais tout à fait équivalent au premier énoncé
(parcontre, on perd la grille de design). La seule différence qui existe
entreun join externe et ce join interne c'est justement de conserver les
enregistrements qui n'apparaissent pas lors du join interne ! Ce
sont
CESenregistrements qu'on veut pointer du doigt, et leur "signature"
c'est
qu'ils ont des NULL dans les colonnes de la table "non préservée"...
Table2dans notre cas. D'où la solution proposée.
Pour effacer, changer le SELECT par DELETE DISTINCTROW
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
messagenews:%Bonjour Michel
Malheureusement ta suggestion ne me permet pas d'obtenir ce que je
souhaite.
En fait je sais sélectionner les enregistrements de Table1 qui
m'interressent avec la requete:
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
Comme tu le comprends je ne compare les valeurs que de 2 champs,
(le
nombrede champs de chaque Table est différent).
Ce que je n'arrive pas à faire c'est sélectionner (pour les
DELETER)
tousles champs de
Table1 qui n'ont pas été sélectionnés dans ma requete ...
ps: pour etre complet j'ai actuellement ChampB de table2 qui est
de
typeLien hypertexte
si vraiment cela était un obstacle incontournable je le
changeraienchamp texte
@+
Alain
"Michel Walsh" a écrit dans
le
messagede news:Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote
in
messagenews:Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les
enregistrementspourlesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC
dans
table2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
helas Trois fois Helas la requete est toujour vide ...
Si les valeurs de Champ1 de Table 1 sont
:Toto,Tata,Tutu,Titi,Toto,Tutu,Tata,Tutu, Tittii => total de 9
enregistrements
et les valeurs de ChampB de Table 2 sont : Zaza,Zozo,Toto,Zazi,Tutu =>
total
de 5 enregistrements
alors la requete doit permettre de DELETER ou (retourner) tous les
enregistrements
de tous les champs de Table1 dont on retrouve une valeur dans Table2 (il
s'agit des 5 enregistrements Toto,Tutu,Toto,Tutu, Tutu)
@+
Alain
En fait, si les enregistrement de table1 sous Champ1 ont les valeurs
{ 1,
2, 3 }
et table2.ChampB les valeurs { 1, 2, 4 }
alors,
SELECT Champ1, ChampB
FROM Table1, Table2
WHERE table1.Champ1 <>table2.ChampB
donne
1 2
1 4
2 1
2 4
3 1
3 2
3 4
toutes les lignes de champ1 apparaissent dans champB. Seules les
combinaisons (1 , 1) et ( 2, 2 ) ne furent pas retenues. Il faut
effacer
1 et 2 de table1 ? Si c'est bien cela, alors un simple IN est à
utiliser
SELECT Champ1
FROM table1
WHERE Camp1 = ANY( SELECT ChampB FROM table2)
( = ANY peut être remplacé par IN )
Le <> ALL, sa négation, NOT IN si on préfère, effacera l'enregistrement
ayant 3 comme valeur de Champ1.
Donc, pour simplifier, vérifier si on désire
SELECT Champ1
FROM table1
WHERE Camp1 IN( SELECT ChampB FROM table2)
ou si on désire
SELECT Champ1
FROM table1
WHERE NOT Camp1 IN( SELECT ChampB FROM table2)
tout simplement... et utiliser un DELETE par la suite (qui devrait
fonctionner).
Vanderghast, Access MVP
"Alain TEYSSEDRE" <alain.teyssedre-NoSpam@libertysurf.fr> wrote in
message
news:utdNRlMuDHA.556@TK2MSFTNGP11.phx.gbl...
Re-Bonjour
Bon ta requete Selection ==> super ça marche le résultat est OK
par contre moi aussi je croyais qu'il suffisait de remplacer SELECT
par
DELETE DISTINCTROW .. et la patatras Erreur ..."Impossible de
supprimer
dans les tables spécifiées !"
aurais tu une idée
Merci
Alain
"Michel Walsh" <vanderghast@VirusAreFunnierThanSpam> a écrit dans le
message
de news:uThCkbMuDHA.3532@TK2MSFTNGP11.phx.gbl...
Salut,
Si il s'agit d'avoir les enregistrements de Table1 qui ne sont pas
retournés
par
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
alors:
SELECT Table1.*
FROM Table2 RIGHT JOIN Table1
ON Table1.champ4 <> table2.champB
WHERE Table2.ChampB Is Null
devrait le faire.
J'ai simplement commencé par remonter la comparaison entre tables de
la
clause WHERE au join, dans la clause ON:
SELECT Table1.*
FROM Table2 INNER JOIN Table1
ON Table1.champ4 <> table2.champB
Plus de clause WHERE, mais tout à fait équivalent au premier énoncé
(par
contre, on perd la grille de design). La seule différence qui existe
entre
un join externe et ce join interne c'est justement de conserver les
enregistrements qui n'apparaissent pas lors du join interne ! Ce
sont
CES
enregistrements qu'on veut pointer du doigt, et leur "signature"
c'est
qu'ils ont des NULL dans les colonnes de la table "non préservée"...
Table2
dans notre cas. D'où la solution proposée.
Pour effacer, changer le SELECT par DELETE DISTINCTROW
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" <alain.teyssedre-NoSpam@libertysurf.fr> wrote in
message
news:%2353kMNLuDHA.2304@TK2MSFTNGP12.phx.gbl...
Bonjour Michel
Malheureusement ta suggestion ne me permet pas d'obtenir ce que je
souhaite.
En fait je sais sélectionner les enregistrements de Table1 qui
m'interressent avec la requete:
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
Comme tu le comprends je ne compare les valeurs que de 2 champs,
(le
nombre
de champs de chaque Table est différent).
Ce que je n'arrive pas à faire c'est sélectionner (pour les
DELETER)
tous
les champs de
Table1 qui n'ont pas été sélectionnés dans ma requete ...
ps: pour etre complet j'ai actuellement ChampB de table2 qui est
de
type
Lien hypertexte
si vraiment cela était un obstacle incontournable je le
changerai
en
champ texte
@+
Alain
"Michel Walsh" <vanderghast@VirusAreFunnierThanSpam> a écrit dans
le
message
de news:OHPyA9DuDHA.3496@TK2MSFTNGP11.phx.gbl...
Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" <alain.teyssedre-NoSpam@libertysurf.fr> wrote
in
message
news:eCKfSdDuDHA.2520@TK2MSFTNGP10.phx.gbl...
Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les
enregistrements
pour
lesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC
dans
table
2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain
helas Trois fois Helas la requete est toujour vide ...
Si les valeurs de Champ1 de Table 1 sont
:Toto,Tata,Tutu,Titi,Toto,Tutu,Tata,Tutu, Tittii => total de 9
enregistrements
et les valeurs de ChampB de Table 2 sont : Zaza,Zozo,Toto,Zazi,Tutu =>
total
de 5 enregistrements
alors la requete doit permettre de DELETER ou (retourner) tous les
enregistrements
de tous les champs de Table1 dont on retrouve une valeur dans Table2 (il
s'agit des 5 enregistrements Toto,Tutu,Toto,Tutu, Tutu)
@+
Alain
En fait, si les enregistrement de table1 sous Champ1 ont les valeurs
{ 1,
2, 3 }
et table2.ChampB les valeurs { 1, 2, 4 }
alors,
SELECT Champ1, ChampB
FROM Table1, Table2
WHERE table1.Champ1 <>table2.ChampB
donne
1 2
1 4
2 1
2 4
3 1
3 2
3 4
toutes les lignes de champ1 apparaissent dans champB. Seules les
combinaisons (1 , 1) et ( 2, 2 ) ne furent pas retenues. Il faut
effacer1 et 2 de table1 ? Si c'est bien cela, alors un simple IN est à
utiliser
SELECT Champ1
FROM table1
WHERE Camp1 = ANY( SELECT ChampB FROM table2)
( = ANY peut être remplacé par IN )
Le <> ALL, sa négation, NOT IN si on préfère, effacera l'enregistrement
ayant 3 comme valeur de Champ1.
Donc, pour simplifier, vérifier si on désire
SELECT Champ1
FROM table1
WHERE Camp1 IN( SELECT ChampB FROM table2)
ou si on désire
SELECT Champ1
FROM table1
WHERE NOT Camp1 IN( SELECT ChampB FROM table2)
tout simplement... et utiliser un DELETE par la suite (qui devrait
fonctionner).
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
message
news:Re-Bonjour
Bon ta requete Selection ==> super ça marche le résultat est OK
par contre moi aussi je croyais qu'il suffisait de remplacer SELECT
par
DELETE DISTINCTROW .. et la patatras Erreur ..."Impossible de
supprimer
dans les tables spécifiées !"
aurais tu une idée
Merci
Alain
"Michel Walsh" a écrit dans le
messagede news:Salut,
Si il s'agit d'avoir les enregistrements de Table1 qui ne sont pas
retournéspar
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
alors:
SELECT Table1.*
FROM Table2 RIGHT JOIN Table1
ON Table1.champ4 <> table2.champB
WHERE Table2.ChampB Is Null
devrait le faire.
J'ai simplement commencé par remonter la comparaison entre tables de
laclause WHERE au join, dans la clause ON:
SELECT Table1.*
FROM Table2 INNER JOIN Table1
ON Table1.champ4 <> table2.champB
Plus de clause WHERE, mais tout à fait équivalent au premier énoncé
(parcontre, on perd la grille de design). La seule différence qui existe
entreun join externe et ce join interne c'est justement de conserver les
enregistrements qui n'apparaissent pas lors du join interne ! Ce
sont
CESenregistrements qu'on veut pointer du doigt, et leur "signature"
c'est
qu'ils ont des NULL dans les colonnes de la table "non préservée"...
Table2dans notre cas. D'où la solution proposée.
Pour effacer, changer le SELECT par DELETE DISTINCTROW
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote in
messagenews:%Bonjour Michel
Malheureusement ta suggestion ne me permet pas d'obtenir ce que je
souhaite.
En fait je sais sélectionner les enregistrements de Table1 qui
m'interressent avec la requete:
SELECT Table1.*
FROM Table2, Table1
WHERE (([Table1].[Champ4]<>[Table2].[ChampB]));
Comme tu le comprends je ne compare les valeurs que de 2 champs,
(le
nombrede champs de chaque Table est différent).
Ce que je n'arrive pas à faire c'est sélectionner (pour les
DELETER)
tousles champs de
Table1 qui n'ont pas été sélectionnés dans ma requete ...
ps: pour etre complet j'ai actuellement ChampB de table2 qui est
de
typeLien hypertexte
si vraiment cela était un obstacle incontournable je le
changeraienchamp texte
@+
Alain
"Michel Walsh" a écrit dans
le
messagede news:Salut,
Peut-être quelque chose dans le genre:
DELETE DISTINCTROW table1.*
FROM table1 LEFT JOIN table2
ON table1.champ1 = table2.champA
AND
table1.champ2 = table2.champB
AND
... jusqu'à plus soif ...
WHERE table2.ChampDeLaCléPrimaire Is Null
Espérant être utile,
Vanderghast, Access MVP
"Alain TEYSSEDRE" wrote
in
messagenews:Bonjour
J'ai 2 tables Table1 et Table2
qui ont comme champs Champs1, Champs2, Champs3 ...pour Table1
et ChampA, , ChampB, ChampC .. pour Table2
Je souhaite par code VBA supprimer de Table1 tous les
enregistrementspourlesquels
la valeur de Champ1 ne correspond à aucune valeur de ChampC
dans
table2.
c'est surement évident mais ce soir j'y arrive pas !
merci pour votre aide
Alain