OVH Cloud OVH Cloud

Question SQL sous-requête

5 réponses
Avatar
La Mouette
Bonjour je tente de faire une requête qui ressemble à ceci:

DELETE * FROM Agenda WHERE idGroupe, idDossier IN (SELECT idGroupe,
idDossier FROM ArchivesDossiers);

Évidemment ca ne fonctionne pas car la sous-requête retourne 2 colonnes.
Mais je ne sais pas comment faire autrement? Je voulais concaténer
idGroupe&""&idDossier au pire, mais encore une fois, je ne suis pas capable.

Avez-vous des idées.

Merci!

5 réponses

Avatar
Sylvain Lafontaine
Sans l'avoir testé:

DELETE * FROM Agenda A WHERE idDossier IN (SELECT idDossier FROM
ArchivesDossiers AD where A.idGroupe = AD.IdGroupe)

ou encore:

DELETE * FROM Agenda A WHERE Exists (SELECT * FROM ArchivesDossiers AD where
A.IdDossier = AD.IdDossier and A.idGroupe = AD.IdGroupe)

Ou peut-être aussi:

DELETE * FROM Agenda A inner join (SELECT idGroupe,
idDossier FROM ArchivesDossiers) S on (A.IdGroupe = S.IdGroupe and
A.IdDossier = S.IdDossier)

S. L.

"La Mouette" wrote in message
news:
Bonjour je tente de faire une requête qui ressemble à ceci:

DELETE * FROM Agenda WHERE idGroupe, idDossier IN (SELECT idGroupe,
idDossier FROM ArchivesDossiers);

Évidemment ca ne fonctionne pas car la sous-requête retourne 2 colonnes.
Mais je ne sais pas comment faire autrement? Je voulais concaténer
idGroupe&""&idDossier au pire, mais encore une fois, je ne suis pas
capable.

Avez-vous des idées.

Merci!


Avatar
La Mouette
Salut!

J'ai essayé tes 3 options, malheureusement, aucunes ne marche. Les 2
premières demandent les valeurs de idGroupe, et idDossier quand je la démarre
et la troisième ne peux pas faire un delete quand il y a un join!

Est-ce qu'il y a d'autres idées dans l'air?

Merci!



Sans l'avoir testé:

DELETE * FROM Agenda A WHERE idDossier IN (SELECT idDossier FROM
ArchivesDossiers AD where A.idGroupe = AD.IdGroupe)

ou encore:

DELETE * FROM Agenda A WHERE Exists (SELECT * FROM ArchivesDossiers AD where
A.IdDossier = AD.IdDossier and A.idGroupe = AD.IdGroupe)

Ou peut-être aussi:

DELETE * FROM Agenda A inner join (SELECT idGroupe,
idDossier FROM ArchivesDossiers) S on (A.IdGroupe = S.IdGroupe and
A.IdDossier = S.IdDossier)

S. L.

"La Mouette" wrote in message
news:
Bonjour je tente de faire une requête qui ressemble à ceci:

DELETE * FROM Agenda WHERE idGroupe, idDossier IN (SELECT idGroupe,
idDossier FROM ArchivesDossiers);

Évidemment ca ne fonctionne pas car la sous-requête retourne 2 colonnes.
Mais je ne sais pas comment faire autrement? Je voulais concaténer
idGroupe&""&idDossier au pire, mais encore une fois, je ne suis pas
capable.

Avez-vous des idées.

Merci!







Avatar
Sylvain Lafontaine
Je vais essayer de faire un test aujourd'hui mais auparavant j'aurais besoin
des infos suivantes afin de bien comprendre la relation entre Agenda et
ArchivesDossiers:

1- Lorsque vous voulez faire votre test, est-ce qu'il faut que IdGroupe et
IdDossier soient présents en même temps sur la même fiche d'ArchivesDossiers
ou s'il faut seulement l'un ou l'autre?

2- Est-ce que IdGroupe et IdDossier sont la clef primaire composée de
ArchivesDossiers ou si ce dernier possède sa propre clef primaire
indépendante (genre « IdArchiveDossier ») ?

3- Y a-t-il une relation clef primaire/clef externe entre Agenda et
ArchivesDossiers?

S. L.

"La Mouette" wrote in message
news:
Salut!

J'ai essayé tes 3 options, malheureusement, aucunes ne marche. Les 2
premières demandent les valeurs de idGroupe, et idDossier quand je la
démarre
et la troisième ne peux pas faire un delete quand il y a un join!

Est-ce qu'il y a d'autres idées dans l'air?

Merci!



Sans l'avoir testé:

DELETE * FROM Agenda A WHERE idDossier IN (SELECT idDossier FROM
ArchivesDossiers AD where A.idGroupe = AD.IdGroupe)

ou encore:

DELETE * FROM Agenda A WHERE Exists (SELECT * FROM ArchivesDossiers AD
where
A.IdDossier = AD.IdDossier and A.idGroupe = AD.IdGroupe)

Ou peut-être aussi:

DELETE * FROM Agenda A inner join (SELECT idGroupe,
idDossier FROM ArchivesDossiers) S on (A.IdGroupe = S.IdGroupe and
A.IdDossier = S.IdDossier)

S. L.

"La Mouette" wrote in message
news:
Bonjour je tente de faire une requête qui ressemble à ceci:

DELETE * FROM Agenda WHERE idGroupe, idDossier IN (SELECT idGroupe,
idDossier FROM ArchivesDossiers);

Évidemment ca ne fonctionne pas car la sous-requête retourne 2
colonnes.
Mais je ne sais pas comment faire autrement? Je voulais concaténer
idGroupe&""&idDossier au pire, mais encore une fois, je ne suis pas
capable.

Avez-vous des idées.

Merci!









Avatar
La Mouette
D'abord: Agenda est une table. Et ArchivesDossiers est une requête.

1- Lorsque vous voulez faire votre test, est-ce qu'il faut que IdGroupe et
IdDossier soient présents en même temps sur la même fiche d'ArchivesDossiers
ou s'il faut seulement l'un ou l'autre?


Il faut que idGroupe et idDossier soit là en même temps sur la même ligne de
ArchivesDossiers. Et si la table Agenda contient des lignes avec ces même
idGroupe-idDossier, je veux les enlever.

2- Est-ce que IdGroupe et IdDossier sont la clef primaire composée de
ArchivesDossiers ou si ce dernier possède sa propre clef primaire
indépendante (genre « IdArchiveDossier ») ?


ArchivesDossiers est une requête, mais il n'y a pas de idArchivesDossier. La
clé primaire est une clé composé de idGroupe-idDossier (Il ne peut pas y
avoir deux fois le même numéro de dossier dans le même groupe)

3- Y a-t-il une relation clef primaire/clef externe entre Agenda et
ArchivesDossiers?


Le lien est juste avec idGroupe et idAgenda.


Je finis par un exemple:

Si ArchivesDossiers ramène:
Groupe - Dossier - description
1600 - 2 - desc1
1600 - 3 - desc2
2300 - 4 - desc3

Et Agenda possède:
1600 - 1
1600 - 2
1600 - 3
2300 - 2
2300 - 4

Alors je veux effacer:
1600-2
1600-3
2300-4

Merci pour votre aide! C'est très apprécié!

Avatar
Mona Yazbeck
Salut!

J'ai remarqué qu'avec ça ca marche:

DELETE * FROM Agenda WHERE ([idGroupe] & [idDossier]) In (SELECT
idGroupe&idDossier FROM ArchivesAgenda);

Sauf que ca prend tellement de temps avant de trouver les résultats que je
me suis jamais rendu au bout! Avez-vous une idée de pourquoi ca peut être
lent comme ça?

Merci!!


"La Mouette" a écrit dans le message
de news:

D'abord: Agenda est une table. Et ArchivesDossiers est une requête.

1- Lorsque vous voulez faire votre test, est-ce qu'il faut que IdGroupe
et


IdDossier soient présents en même temps sur la même fiche
d'ArchivesDossiers


ou s'il faut seulement l'un ou l'autre?


Il faut que idGroupe et idDossier soit là en même temps sur la même ligne
de

ArchivesDossiers. Et si la table Agenda contient des lignes avec ces même
idGroupe-idDossier, je veux les enlever.

2- Est-ce que IdGroupe et IdDossier sont la clef primaire composée de
ArchivesDossiers ou si ce dernier possède sa propre clef primaire
indépendante (genre « IdArchiveDossier ») ?


ArchivesDossiers est une requête, mais il n'y a pas de idArchivesDossier.
La

clé primaire est une clé composé de idGroupe-idDossier (Il ne peut pas y
avoir deux fois le même numéro de dossier dans le même groupe)

3- Y a-t-il une relation clef primaire/clef externe entre Agenda et
ArchivesDossiers?


Le lien est juste avec idGroupe et idAgenda.


Je finis par un exemple:

Si ArchivesDossiers ramène:
Groupe - Dossier - description
1600 - 2 - desc1
1600 - 3 - desc2
2300 - 4 - desc3

Et Agenda possède:
1600 - 1
1600 - 2
1600 - 3
2300 - 2
2300 - 4

Alors je veux effacer:
1600-2
1600-3
2300-4

Merci pour votre aide! C'est très apprécié!