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

Langage SQL Discussion :

on cascade sur la meme table


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 110
    Points : 68
    Points
    68
    Par défaut on cascade sur la meme table
    Bonjour,

    j'aimerais savor s'il est possible deffectuer un delete on cascade sur une meme table ?

    JE m'explique un peu. Les lignes de ma tables sont des report, certains report contiennent des report et donc c 'enfants' ont un champs report_parent qui contient l'ID du report.

    Donc quand je supprime le report d'id 1, tous les rapports ayant pour report_parent 1 doivent aussi etre supprimes.

    Y'a-t-il une fonction directe ?
    Est-il possible de le faire sinon par une autre table avec deux liaisons 'on cascade' ?

    Merci

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 863
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 863
    Points : 3 444
    Points
    3 444
    Par défaut
    Salut,

    Je ne vois pas pourquoi ça ne fonctionnerait pas sur une même table, après tout c'est une contrainte valable, donc le cascade devrait pouvoir effacer les lignes concernées.

    As-tu essayé ?

    A+

  3. #3
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 110
    Points : 68
    Points
    68
    Par défaut
    lol non je ne sais pas l'ecrire, je me suis pose la question mais parce que je m'arrache les cheveux sur ma fonction recursive jsp qui est censee le faire.

    voici le code de creation de ma table, si tu peux me le corriger je pourrai essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE REPORT (
    REPORT_ID smallint primary key not null auto_increment,
    REPORT_NAME varchar(100) not null,
    REPORT_PATH varchar(200),
    REPORT_HAS_CHILD char(1) not null,
    REPORT_PARENT smallint not null,
    REPORT_LEVEL smallint not null
    )

  4. #4
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 863
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 863
    Points : 3 444
    Points
    3 444
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE REPORT (
    REPORT_ID smallint primary key not null auto_increment,
    REPORT_NAME varchar(100) not null,
    REPORT_PATH varchar(200),
    REPORT_HAS_CHILD char(1) not null,
    REPORT_PARENT smallint not null,
    REPORT_LEVEL smallint not null,
    FOREIGN KEY (REPORT_PARENT) REFERENCES REPORT(REPORT_ID)
    )
    Un truc comme ça pour voir ?

  5. #5
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 110
    Points : 68
    Points
    68
    Par défaut
    ca ne fonctionne pas, je cherche en essayant d'avoir une table tierce.

  6. #6
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 863
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 863
    Points : 3 444
    Points
    3 444
    Par défaut
    Quel SGBD utilises-tu ?
    Peut-être n'autorise-t-il pas les clés étrangères, ou bien peut-être la syntaxe est différente..

    A+

  7. #7
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 110
    Points : 68
    Points
    68
    Par défaut
    J'utilise MySQL, et j'ai beau essaye tout ce que je trouve sur le net, y compris sur leur site, je n'arrive pas a faire un delete on cascade, meme le plus simple possible.

    Il n'y a rien de different dans la requete delete n'est-ce pas ?

    Je tape juste :
    delete from report where report_id='22'
    par exemple ?

  8. #8
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 863
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 863
    Points : 3 444
    Points
    3 444
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE REPORT (
    REPORT_ID smallint primary key not null auto_increment,
    REPORT_NAME varchar(100) not null,
    REPORT_PATH varchar(200),
    REPORT_HAS_CHILD char(1) not null,
    REPORT_PARENT smallint not null,
    REPORT_LEVEL smallint not null,
    FOREIGN KEY (REPORT_PARENT) REFERENCES REPORT(REPORT_ID) ON DELETE CASCADE
    ) ENGINE=INNODB;
    Pour MySQL il faut ajouter la clause ON DELETE CASCADE apparement.

    Tu as essayé ?

    A+

  9. #9
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 110
    Points : 68
    Points
    68
    Par défaut
    oui g essaye.

    et aussi en mettant INNDB
    je peux creer la table, ca passe mais je ne peux rien mettre dedans, il dit qu'une contrainte m'en empeche.

    Bref... je replanche sur la solution jsp...

    Merci

  10. #10
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 863
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 863
    Points : 3 444
    Points
    3 444
    Par défaut
    Hmm normal au niveau de la contrainte; Créer ta table sans la contrainte, insère un élément "root", auquel tu lui donne le même parent que son propre id ( 1 par exemple ) puis remet la contrainte via un alter table, et ça devrait le faire

    A+ et bon courage

  11. #11
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 110
    Points : 68
    Points
    68
    Par défaut
    non ca ne fonctionne toujours pas...

Discussions similaires

  1. Plusieurs jointures sur la meme table [complexe]
    Par Wells dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/06/2006, 11h41
  2. [debutant] 2 shemas qui pointent sur la meme table
    Par pmartin8 dans le forum Oracle
    Réponses: 1
    Dernier message: 16/05/2006, 20h33
  3. DOUBLE REQUETE SUR UNE MEME TABLE
    Par MORAS dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/01/2006, 13h40
  4. Requete sur la meme table
    Par krak70 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/09/2005, 09h59
  5. Association 1:n sur une meme table
    Par dafalcon dans le forum Décisions SGBD
    Réponses: 15
    Dernier message: 27/04/2005, 09h07

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