PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → Suppréssion sur une requete union
Suppréssion sur une requete union
Débuté par ( Alliances-Informat, 05 juin 2024 17:03 - 3 réponses
Membre enregistré
11 messages
Posté le 05 juin 2024 - 17:03
Bonjour à tous,

j'aurais besoin d'un conseil afin de pouvoir supprimer un ou plusieurs enregistrements depuis une requête union;
donc une suppression d'1 enregistrement trouvé en parcourant plusieurs fichiers.

D'avance merci de votre aide :)

SELECT
Monfichier.codebarre AS codebarre,
Monfichier.Description AS Description,
Monfichier.dateachat AS dateachat,
Monfichier.dateperemption AS dateperemption,
Monfichier.Lieu AS Lieu
FROM
Monfichier
WHERE
Monfichier.codebarre = {Paramcodebarre}

UNION ALL

SELECT
Monplacard.Description AS Description,
Monplacard.codebarre AS codebarre,
Monplacard.dateachat AS dateachat,
Monplacard.dateperemption AS dateperemption,
Monplacard.Lieu AS Lieu
FROM
Monplacard
WHERE
Monplacard.codebarre = {Paramcodebarre}

UNION ALL

SELECT
MonGarage.Description AS Description,
MonGarage.codebarre AS codebarre,
MonGarage.dateachat AS dateachat,
MonGarage.dateperemption AS dateperemption,
MonGarage.Lieu AS Lieu
FROM
MonGarage
WHERE
MonGarage.codebarre = {Paramcodebarre}

ORDER BY
Description ASC

--
Robert
Membre enregistré
698 messages
Posté le 07 juin 2024 - 14:17
Bonjour,
Pour un DELETE sur ce type de requête, je ne sais pas.
Mais après exécution de la requête, vous obtenez 1 ou des enregistrements, vous pouvez déclenchez la suppression par une requête DELETE (par exemple) puisque vous connaissez l'enregistrement.
Cdlt
Message modifié, 07 juin 2024 - 14:18
Membre enregistré
4 111 messages
Posté le 07 juin 2024 - 22:13
Bonjour,
Dans l'absolu, ce serait possible en utilisant ta requête UNION en tant que sous requête dans une requête DELETE WHERE IN. Toutefois tu serais obligé de contrôler chaque Tablen.Code avec le IN, le tout étant séparé par des OR.
Le plus simple est de créer une requête qui inclus les 3 requêtes DELETE (Attention aux ";") :
DELETE FROM
Table1
WHERE
Table1.CodeTable1 = {pCode};
DELETE FROM
Table2
WHERE
Table2.CodeTable2 = {pCode};
DELETE FROM
Table3
WHERE
Table3.CodeTable3 = {pCode}


Note, c'est quand même plus lisible quand le code est balisé.

--
Il y a peut être plus simple, mais, ça tourne
Message modifié, 07 juin 2024 - 22:14
Membre enregistré
698 messages
Posté le 08 juin 2024 - 16:49
Précision importante, exécutez la requête DELETE uniquement si la requête UNION retourne un enregistrement, par exemple :
SI HNbEnr(MaRequete_Union) <> 0 ALORS
// Exécution de la requête DELETE
FIN

sinon le DELETE supprimera les enregistrement correspondants à {Paramcodebarre} dans les différentes tables même si l'enregistrement n'existe pas dans toutes les tables.
Cdlt