J'ai une table personne et une table contact.
Je souhaite ponctuellement créer pour toutes les personnes qui n'en ont pas,
un contact.
Je voulais me servir de la commande SQL EXISTS.
Ma requête aurait été un truc de ce genre :
"INSERT INTO contact (code_personne, num_type_contact, num_objet_contact,
num_origine_contact, num_type_acteur, date_contact, cmt )
SELECT personne.code_personne, 2 AS Expr1, 10 AS Expr2, 7 AS Expr3, 1 AS
Expr4, personne.date_contact_selection, personne.cmt
FROM personne WHERE NOT EXISTS (SELECT * FROM contact WHERE
contact.num_objet_contact=10);"
J'ai l'impression que le NOT EXISTS ne fonctionne pas.
Auriez-vous une solution à mon pb ?
D'avance merci.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Richard_35
Bonjour Isa,
Il me semble que tu fais une petite confusion : "WHERE NOT EXISTS (SELECT * FROM contact WHERE contact.num_objet_contact)" veut dire : "si il n'existe aucun enregistrement dans contact dont contact.num_objet_contact (tout personne.code_personne confondu)." D'ailleurs, à aucun moment, tu ne fais la liaison entre personne.code_personne et contact.code_personne, donc Access ne peut pas le savoir.
Si tu veux créer dans CONTACT les enregistrements de PERSONNE qui n'existent pas dans CONTACT, je te propose de créer, par l'assistant, une requête ajout de non-correspondance entre PERSONNE et CONTACT, ce qui donnera, en gros : INSERT INTO contact (code_personne, num_type_contact, num_objet_contact,
FROM personne LEFT JOIN contact ON personne.code_personne = contact.code_personne WHERE (contact.code_personne Is Null);
Dis-nous et bon courage, Richard.
"Isa" a écrit :
Bonjour,
J'ai une table personne et une table contact. Je souhaite ponctuellement créer pour toutes les personnes qui n'en ont pas, un contact. Je voulais me servir de la commande SQL EXISTS. Ma requête aurait été un truc de ce genre : "INSERT INTO contact (code_personne, num_type_contact, num_objet_contact, num_origine_contact, num_type_acteur, date_contact, cmt ) SELECT personne.code_personne, 2 AS Expr1, 10 AS Expr2, 7 AS Expr3, 1 AS Expr4, personne.date_contact_selection, personne.cmt FROM personne WHERE NOT EXISTS (SELECT * FROM contact WHERE contact.num_objet_contact);"
J'ai l'impression que le NOT EXISTS ne fonctionne pas. Auriez-vous une solution à mon pb ? D'avance merci.
Isa.
Bonjour Isa,
Il me semble que tu fais une petite confusion :
"WHERE NOT EXISTS (SELECT * FROM contact WHERE
contact.num_objet_contact)"
veut dire :
"si il n'existe aucun enregistrement dans contact dont
contact.num_objet_contact (tout personne.code_personne confondu)."
D'ailleurs, à aucun moment, tu ne fais la liaison entre
personne.code_personne et contact.code_personne, donc Access ne peut pas le
savoir.
Si tu veux créer dans CONTACT les enregistrements de PERSONNE qui n'existent
pas dans CONTACT, je te propose de créer, par l'assistant, une requête ajout
de non-correspondance entre PERSONNE et CONTACT, ce qui donnera, en gros :
INSERT INTO contact (code_personne, num_type_contact, num_objet_contact,
FROM personne LEFT JOIN contact ON personne.code_personne =
contact.code_personne
WHERE (contact.code_personne Is Null);
Dis-nous et bon courage,
Richard.
"Isa" a écrit :
Bonjour,
J'ai une table personne et une table contact.
Je souhaite ponctuellement créer pour toutes les personnes qui n'en ont pas,
un contact.
Je voulais me servir de la commande SQL EXISTS.
Ma requête aurait été un truc de ce genre :
"INSERT INTO contact (code_personne, num_type_contact, num_objet_contact,
num_origine_contact, num_type_acteur, date_contact, cmt )
SELECT personne.code_personne, 2 AS Expr1, 10 AS Expr2, 7 AS Expr3, 1 AS
Expr4, personne.date_contact_selection, personne.cmt
FROM personne WHERE NOT EXISTS (SELECT * FROM contact WHERE
contact.num_objet_contact);"
J'ai l'impression que le NOT EXISTS ne fonctionne pas.
Auriez-vous une solution à mon pb ?
D'avance merci.
Il me semble que tu fais une petite confusion : "WHERE NOT EXISTS (SELECT * FROM contact WHERE contact.num_objet_contact)" veut dire : "si il n'existe aucun enregistrement dans contact dont contact.num_objet_contact (tout personne.code_personne confondu)." D'ailleurs, à aucun moment, tu ne fais la liaison entre personne.code_personne et contact.code_personne, donc Access ne peut pas le savoir.
Si tu veux créer dans CONTACT les enregistrements de PERSONNE qui n'existent pas dans CONTACT, je te propose de créer, par l'assistant, une requête ajout de non-correspondance entre PERSONNE et CONTACT, ce qui donnera, en gros : INSERT INTO contact (code_personne, num_type_contact, num_objet_contact,
FROM personne LEFT JOIN contact ON personne.code_personne = contact.code_personne WHERE (contact.code_personne Is Null);
Dis-nous et bon courage, Richard.
"Isa" a écrit :
Bonjour,
J'ai une table personne et une table contact. Je souhaite ponctuellement créer pour toutes les personnes qui n'en ont pas, un contact. Je voulais me servir de la commande SQL EXISTS. Ma requête aurait été un truc de ce genre : "INSERT INTO contact (code_personne, num_type_contact, num_objet_contact, num_origine_contact, num_type_acteur, date_contact, cmt ) SELECT personne.code_personne, 2 AS Expr1, 10 AS Expr2, 7 AS Expr3, 1 AS Expr4, personne.date_contact_selection, personne.cmt FROM personne WHERE NOT EXISTS (SELECT * FROM contact WHERE contact.num_objet_contact);"
J'ai l'impression que le NOT EXISTS ne fonctionne pas. Auriez-vous une solution à mon pb ? D'avance merci.
Isa.
Sylvain Lafontaine
Vous devez établir la relation entre chaque ligne de Personne et la sous-requête présente dans l'appel to Not Exists():
INSERT INTO contact (code_personne, num_type_contact, num_objet_contact, num_origine_contact, num_type_acteur, date_contact, cmt ) SELECT personne.code_personne, 2 AS Expr1, 10 AS Expr2, 7 AS Expr3, 1 AS Expr4, personne.date_contact_selection, personne.cmt FROM personne WHERE NOT EXISTS (SELECT * FROM contact WHERE contact.num_objet_contact
AND contact.code_personne = personne.code_personne );
Votre requête sera également plus lisible si vous utilisez les alias pour les noms des tables:
INSERT INTO contact (code_personne, num_type_contact, num_objet_contact, num_origine_contact, num_type_acteur, date_contact, cmt ) SELECT P.code_personne, 2 AS Expr1, 10 AS Expr2, 7 AS Expr3, 1 AS Expr4, P.date_contact_selection, P.cmt FROM personne as P WHERE NOT EXISTS (SELECT * FROM contact as C1 WHERE C1.num_objet_contact And C1.code_personne = P.code_personne );
Pour ce cas simple, vous pouvez également remplacer le NOT Exists par un Left Join et un test sur les valeurs identités nulles tel que démontré dans le message de Richard. Finalement, par expérience personnelle, je peux vous dire que la notation Camel est plus facile à lire que l'utilisation du symbol de soulignement: NumTypeContact est mieux que num_type_contact parce que la lecture de tous ces "_" finissent par vous faire tourner la tête:
INSERT INTO Contact (CodePersonne, NumTypeContact, NumObjetContact, NumOrigineContact, NumTypeActeur, DateContact, Cmt ) SELECT P.CodePersonne, 2 AS Expr1, 10 AS Expr2, 7 AS Expr3, 1 AS Expr4, P.DateContactSelection, P.cmt FROM Personne as P WHERE NOT EXISTS (SELECT * FROM Contact as C1 WHERE C1.NumObjetContact And C1.CodePersonne = P.CodePersonne);
-- Sylvain Lafontaine, ing. MVP pour « Windows Live Platform » Courriel: sylvain2009 sylvainlafontaine com (remplissez les blancs, svp.) Consultant indépendant et programmation à distance pour Access et SQL-Server.
"Isa" wrote in message news:
Bonjour,
J'ai une table personne et une table contact. Je souhaite ponctuellement créer pour toutes les personnes qui n'en ont pas, un contact. Je voulais me servir de la commande SQL EXISTS. Ma requête aurait été un truc de ce genre : "INSERT INTO contact (code_personne, num_type_contact, num_objet_contact, num_origine_contact, num_type_acteur, date_contact, cmt ) SELECT personne.code_personne, 2 AS Expr1, 10 AS Expr2, 7 AS Expr3, 1 AS Expr4, personne.date_contact_selection, personne.cmt FROM personne WHERE NOT EXISTS (SELECT * FROM contact WHERE contact.num_objet_contact);"
J'ai l'impression que le NOT EXISTS ne fonctionne pas. Auriez-vous une solution à mon pb ? D'avance merci.
Isa.
Vous devez établir la relation entre chaque ligne de Personne et la
sous-requête présente dans l'appel to Not Exists():
INSERT INTO contact (code_personne, num_type_contact, num_objet_contact,
num_origine_contact, num_type_acteur, date_contact, cmt )
SELECT personne.code_personne, 2 AS Expr1, 10 AS Expr2, 7 AS Expr3, 1 AS
Expr4, personne.date_contact_selection, personne.cmt
FROM personne WHERE NOT EXISTS (SELECT * FROM contact WHERE
contact.num_objet_contact
AND contact.code_personne = personne.code_personne
);
Votre requête sera également plus lisible si vous utilisez les alias pour
les noms des tables:
INSERT INTO contact (code_personne, num_type_contact, num_objet_contact,
num_origine_contact, num_type_acteur, date_contact, cmt )
SELECT P.code_personne, 2 AS Expr1, 10 AS Expr2, 7 AS Expr3, 1 AS
Expr4, P.date_contact_selection, P.cmt
FROM personne as P WHERE NOT EXISTS (SELECT * FROM contact as C1 WHERE
C1.num_objet_contact And C1.code_personne = P.code_personne
);
Pour ce cas simple, vous pouvez également remplacer le NOT Exists par un
Left Join et un test sur les valeurs identités nulles tel que démontré dans
le message de Richard. Finalement, par expérience personnelle, je peux vous
dire que la notation Camel est plus facile à lire que l'utilisation du
symbol de soulignement: NumTypeContact est mieux que num_type_contact parce
que la lecture de tous ces "_" finissent par vous faire tourner la tête:
INSERT INTO Contact (CodePersonne, NumTypeContact, NumObjetContact,
NumOrigineContact, NumTypeActeur, DateContact, Cmt )
SELECT P.CodePersonne, 2 AS Expr1, 10 AS Expr2, 7 AS Expr3, 1 AS
Expr4, P.DateContactSelection, P.cmt
FROM Personne as P WHERE NOT EXISTS (SELECT * FROM Contact as C1 WHERE
C1.NumObjetContact And C1.CodePersonne = P.CodePersonne);
--
Sylvain Lafontaine, ing.
MVP pour « Windows Live Platform »
Courriel: sylvain2009 sylvainlafontaine com (remplissez les blancs, svp.)
Consultant indépendant et programmation à distance pour Access et
SQL-Server.
"Isa" <Isa@discussions.microsoft.com> wrote in message
news:AC10E2A2-A8A9-4741-8745-A943AB5788CD@microsoft.com...
Bonjour,
J'ai une table personne et une table contact.
Je souhaite ponctuellement créer pour toutes les personnes qui n'en ont
pas,
un contact.
Je voulais me servir de la commande SQL EXISTS.
Ma requête aurait été un truc de ce genre :
"INSERT INTO contact (code_personne, num_type_contact, num_objet_contact,
num_origine_contact, num_type_acteur, date_contact, cmt )
SELECT personne.code_personne, 2 AS Expr1, 10 AS Expr2, 7 AS Expr3, 1 AS
Expr4, personne.date_contact_selection, personne.cmt
FROM personne WHERE NOT EXISTS (SELECT * FROM contact WHERE
contact.num_objet_contact);"
J'ai l'impression que le NOT EXISTS ne fonctionne pas.
Auriez-vous une solution à mon pb ?
D'avance merci.
Vous devez établir la relation entre chaque ligne de Personne et la sous-requête présente dans l'appel to Not Exists():
INSERT INTO contact (code_personne, num_type_contact, num_objet_contact, num_origine_contact, num_type_acteur, date_contact, cmt ) SELECT personne.code_personne, 2 AS Expr1, 10 AS Expr2, 7 AS Expr3, 1 AS Expr4, personne.date_contact_selection, personne.cmt FROM personne WHERE NOT EXISTS (SELECT * FROM contact WHERE contact.num_objet_contact
AND contact.code_personne = personne.code_personne );
Votre requête sera également plus lisible si vous utilisez les alias pour les noms des tables:
INSERT INTO contact (code_personne, num_type_contact, num_objet_contact, num_origine_contact, num_type_acteur, date_contact, cmt ) SELECT P.code_personne, 2 AS Expr1, 10 AS Expr2, 7 AS Expr3, 1 AS Expr4, P.date_contact_selection, P.cmt FROM personne as P WHERE NOT EXISTS (SELECT * FROM contact as C1 WHERE C1.num_objet_contact And C1.code_personne = P.code_personne );
Pour ce cas simple, vous pouvez également remplacer le NOT Exists par un Left Join et un test sur les valeurs identités nulles tel que démontré dans le message de Richard. Finalement, par expérience personnelle, je peux vous dire que la notation Camel est plus facile à lire que l'utilisation du symbol de soulignement: NumTypeContact est mieux que num_type_contact parce que la lecture de tous ces "_" finissent par vous faire tourner la tête:
INSERT INTO Contact (CodePersonne, NumTypeContact, NumObjetContact, NumOrigineContact, NumTypeActeur, DateContact, Cmt ) SELECT P.CodePersonne, 2 AS Expr1, 10 AS Expr2, 7 AS Expr3, 1 AS Expr4, P.DateContactSelection, P.cmt FROM Personne as P WHERE NOT EXISTS (SELECT * FROM Contact as C1 WHERE C1.NumObjetContact And C1.CodePersonne = P.CodePersonne);
-- Sylvain Lafontaine, ing. MVP pour « Windows Live Platform » Courriel: sylvain2009 sylvainlafontaine com (remplissez les blancs, svp.) Consultant indépendant et programmation à distance pour Access et SQL-Server.
"Isa" wrote in message news:
Bonjour,
J'ai une table personne et une table contact. Je souhaite ponctuellement créer pour toutes les personnes qui n'en ont pas, un contact. Je voulais me servir de la commande SQL EXISTS. Ma requête aurait été un truc de ce genre : "INSERT INTO contact (code_personne, num_type_contact, num_objet_contact, num_origine_contact, num_type_acteur, date_contact, cmt ) SELECT personne.code_personne, 2 AS Expr1, 10 AS Expr2, 7 AS Expr3, 1 AS Expr4, personne.date_contact_selection, personne.cmt FROM personne WHERE NOT EXISTS (SELECT * FROM contact WHERE contact.num_objet_contact);"
J'ai l'impression que le NOT EXISTS ne fonctionne pas. Auriez-vous une solution à mon pb ? D'avance merci.