Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/02/2008, 14h35   #1
Membre du Club
 
Inscription : avril 2004
Messages : 179
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : avril 2004
Messages : 179
Points : 58
Points : 58
Par défaut [FB]Dans table détail, supprimer tous enregs sauf premier

bonjour,

j'utilise deux tables de type maitre/détail.
pour chaque enregistrement maitre, j'ai de 0 à n détails.

je souhaiterais faire une requête qui me permette de supprimer dans la table détail (pour un maitre donné) tous les enregistrements sauf le premier.

en d'autres termes, je souhaite conserver uniquement le premier détail du maitre.

est-ce possible avec une seule requête ?
engi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2008, 14h36   #2
Modérateur
 
Avatar de Cybher
 
Homme Michel
Consultant informatique
Inscription : mai 2005
Messages : 3 006
Détails du profil
Informations personnelles :
Nom : Homme Michel
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : mai 2005
Messages : 3 006
Points : 4 039
Points : 4 039
bonjour,

1er par rapport à quel critère?
Cybher est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2008, 14h40   #3
Membre du Club
 
Inscription : avril 2004
Messages : 179
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : avril 2004
Messages : 179
Points : 58
Points : 58
théoriquement, il n'y a pas de critère si ce n'est l'ordre naturel de saisie.
néanmoins, si cette information peut simplifier la manip, dans la table détail, chaque enregistrement est horodaté par un champ contenant date/heure.
engi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2008, 14h53   #4
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 451
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 451
Points : 7 563
Points : 7 563
Le langage SQL ne connaît pas l'ordre naturel de saisie. C'est une chance que ta table comporte un champ date/heure de mise à jour.

Quel est la structure de la table ?
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2008, 14h58   #5
Membre du Club
 
Inscription : avril 2004
Messages : 179
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : avril 2004
Messages : 179
Points : 58
Points : 58
table maitre : UTILISATEURS

USR_ID INTEGER NOT NULL
USR_NOM VARCHAR(30) NOT NULL
USR_PRENOM VARCHAR(30)

table détail : IDENTIFIANTS

IDEN_ID INTEGER NOT NULL
IDEN_CODE VARCHAR(30) NOT NULL
USR_ID INTEGER NOT NULL
BDDC TIMESTAMP NOT NULL (création)
BDDM TIMESTAMP NOT NULL (modification)
engi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2008, 15h25   #6
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 451
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 451
Points : 7 563
Points : 7 563
Le modèle de la requête est là :
Code :
1
2
3
4
5
6
7
8
DELETE FROM matable
WHERE   NOT EXISTS  
        (   SELECT  1
            FROM    matable AS ref
            WHERE   ref.id_matable = matable.id_matable
            HAVING  min(ref.dateheure_maj)  = matable.dateheure_maj
        )
 ;
A toi de l'adapter
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2008, 15h32   #7
Membre du Club
 
Inscription : avril 2004
Messages : 179
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : avril 2004
Messages : 179
Points : 58
Points : 58
j'adapte le modèle à mes besoins et je vous tiens au courant.
merci
engi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/02/2008, 18h59   #8
Membre du Club
 
Inscription : avril 2004
Messages : 179
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : avril 2004
Messages : 179
Points : 58
Points : 58
Ca ne fonctionne pas.
Je vais essayer de tourner ça différemment.
engi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2008, 22h47   #9
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Citation:
Envoyé par engi Voir le message
Ca ne fonctionne pas.
En quoi ça ne fonctionne pas ? Tu as un message d'erreur ? ça supprime trop, pas assez ?

Quel est ton SGBD ?
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2008, 08h04   #10
Membre du Club
 
Inscription : avril 2004
Messages : 179
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : avril 2004
Messages : 179
Points : 58
Points : 58
salut,

non pas de message d'erreur mais pas de suppression non plus...
j'utilise firebird.

voilà ma requête, sachant que la table IDENTIFIANTS est la table coté 'détail' :

Code :
1
2
3
4
5
6
7
DELETE FROM IDENTIFIANTS
WHERE NOT EXISTS (
  SELECT 1 
  FROM IDENTIFIANTS AS REF 
  WHERE (REF.IDEN_ID = IDENTIFIANTS.IDEN_ID) 
  HAVING (MIN(REF.BDDM) = IDENTIFIANTS.BDDM)
);
engi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2008, 17h59   #11
Membre éclairé
 
Avatar de TryExceptEnd
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 435
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2006
Messages : 435
Points : 347
Points : 347
C'est normal que ta requete ne donne pas le résultat espéré, tu filtre sur la mauvaise colonne, essaie plutôt ceci :
Code :
1
2
3
4
5
6
7
DELETE FROM IDENTIFIANTS
WHERE NOT EXISTS (
  SELECT 1 
  FROM IDENTIFIANTS AS REF 
  WHERE (REF.USR_ID = IDENTIFIANTS.USR_ID) 
  HAVING (MIN(REF.BDDM) = IDENTIFIANTS.BDDM)
);
__________________
Si vous êtes libre, choisissez le Logiciel Libre.
TryExceptEnd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2008, 08h55   #12
Membre du Club
 
Inscription : avril 2004
Messages : 179
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : avril 2004
Messages : 179
Points : 58
Points : 58
je n'ai pas eu le temps de me repencher sur le problème.
dès que j'aurai le temps de faire la correction, je vous tiendrai au courant.
merci en tous les cas.
engi est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h10.


 
 
 
 
Partenaires

Hébergement Web