IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQLite Discussion :

delete sur tables multiples avec critères


Sujet :

SQLite

  1. #1
    Membre habitué Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Points : 137
    Points
    137
    Par défaut delete sur tables multiples avec critères
    Bonjour à tous,
    Je suis novice en sqlite et je cherche de l'aide pour effectuer une requête sur deux tables sur plusieurs critères.
    j'ai une table: T_Traitements contenant les champs : Id, Type, DateDeb, DateFin, Cause, Prescripteur, Commentaire
    et une autre : T_MedocPoso Contenant les champs : Id, IdTrait, Nom + d'autres champs non-relevants ici.
    IdTrait étant = à l'Id de la table T_Traitements. (Il peut y avoir plusieurs enregistrement ayant le même IdTrait)
    Une variable globale DateRef

    Je cherche à faire la requête suivante.
    Delete des enregistrements de la table T_Traitements dont l'ID est <> de 1 et dont la DateFin est < que la globale DateRef ainsi que la suppression des enregistrements dans la table T_MedocPoso ou IdTrait (Donc Id de la table T_Traitements) auront été suprimés.

    Je ne sais pas si j'ai été clair
    Merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    si votre version de SQLite le permet établissez une contrainte de clé étrangère (FOREIGN KEY) https://www.sqlite.org/foreignkeys.html

    pour la tabel T_MEDOCPOSO rajoutez cet contrainte
    FOREIGN KEY(idtrait) REFERENCES T_Traitements(id) ON DELETE CASCADE
    et tout traitement supprimé sera automatiquement supprimé dans la table T_MEDOCPOSO

    Hélas, l'ajout d'un contrainte ne peut se faire que sur une table en création, ce qui est loin de la norme SQL !
    You can not add a foreign key to a table using ALTER TABLE because SQLite does not support ADD CONSTRAINT in the ALTER TABLE statement.
    Dans le cas où la contrainte de clé n'est pas/plus possible, un trigger sur la table T_Traitements fera la même chose que le ON DELETE CASCADE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TRIGGER DELETEPOSOS BEFORE DELETE 
    ON T_TRAITEMENTS
    BEGIN
      DELETE FROM T_MEDOCPOSO WHERE IDTRAIT=:OLD.ID;
    END;
    le reste n'est donc plus que l'affaire d'un seul SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM T_TRAITEMENTS WHERE ID <>1 AND DATEFIN< datederéfrence 
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre habitué Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Points : 137
    Points
    137
    Par défaut
    Merci SergioMaster,
    Je ne connaissais pas TRIGGER, je vais approfondir un peu.
    Une question que je me pose d'emblée: c'est quand le lancer et sa portée (durée)
    Faut-il le lancer juste avant le delete et chaque fois ou une seule fois au lancement de l'application?
    Mais ça semble top, je creuse !

  4. #4
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 420
    Points : 1 102
    Points
    1 102
    Par défaut
    Bonjour,

    Une question que je me pose d'emblée: c'est quand le lancer et sa portée (durée)
    Tu ne lances pas un trigger, il se déclenche tout seul lors de l'opération pour laquelle il a été défini. C'est à dire que lorsque tu as défini un trigger sur une table pour une opération spécifique (ici DELETE) à cahque opération le trigger se déclenchera sans que ai besoin d'autre action.

    Cordialement

  5. #5
    Membre habitué Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Points : 137
    Points
    137
    Par défaut
    Merci Acaumes,
    Je me suis mal exprimé, j'execute une fois le requête de création
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TRIGGER DELETEPOSOS BEFORE DELETE 
    ON T_TRAITEMENTS
    BEGIN
      DELETE FROM T_MEDOCPOSO WHERE IDTRAIT=:OLD.ID;
    END;
    et il se déclenche à chaque fois que qu'une requête Delete sera lancée sur la table en question.
    Bien compris, et merci pour votre aide.

  6. #6
    Membre habitué Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Points : 137
    Points
    137
    Par défaut
    Encore merci !
    Tout fonctionne parfaitement après légères modifications
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    sqlActionTableTraitements =
                            "CREATE TRIGGER IF NOT EXISTS DeletePosos BEFORE DELETE ON T_Traitements " +
                            "BEGIN " +
                            "DELETE FROM T_MedocPoso WHERE IdTrait = old.Id; " +
                            "END;";
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "DELETE FROM T_Traitements WHERE Id > '1' AND DateFin < " + DateRef;
    Génial les Triggers , ils vont grandement me faciliter la vie

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MariaDB] problème de DELETE sur une jointure avec la même table (doublons)
    Par djoteck dans le forum Requêtes
    Réponses: 1
    Dernier message: 06/10/2017, 10h30
  2. DELETE sur tables avec jointure
    Par iDaaX dans le forum Langage SQL
    Réponses: 1
    Dernier message: 08/03/2013, 08h46
  3. [Oracle] Pb conditions sur tables multiples
    Par guitou12 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/08/2006, 15h48
  4. [SQL] Pb conditions sur tables multiples
    Par guitou12 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/08/2006, 13h49
  5. [Excel] Selection multiple avec critères
    Par tibotibotibo dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 26/04/2005, 10h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo