Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 24/03/2011, 18h04   #1
Invité de passage
 
Inscription : février 2011
Messages : 10
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 10
Points : 0
Points : 0
Envoyer un message via Skype™ à cecilebh
Par défaut Delete avec jointure sur deux tables

Bonjour,

J'ai fait une requete où je retrouve des enregistrements que je dois supprimer.
mais ma requete ne fonctionne qu'en select et pas en delete from.
j'ai des enregistrements à supprimer dans les 2 tables, car ils sont liés.
Je n'ai pas la possibilité de faire une table puis l'autre.
J'ai des champs non utilisés et je pensais faire un update d'abord et ensuite aller sur chaque table faire un delete, mais je n'arrive pas non plus à le faire ....
si vous pouvez m'aider ça me rendrait grandement service. ( j'avais plus l'habitude de faire cela avec mssql)

Code :
1
2
3
4
5
SELECT DISTINCT(f_lig.cd_facid)
FROM f_lig,f_fac
WHERE fac_num IS NULL AND lig_date='13/07/2005'
AND lig_tp_lig <>'G' AND lig_tp_lig <>'A'
AND cd_reg IS NULL AND fac_annul IS NULL;
cecilebh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 19h57   #2
Membre confirmé
 
Homme Ot Othman
Administrateur système et base de données
Inscription : décembre 2007
Messages : 456
Détails du profil
Informations personnelles :
Nom : Homme Ot Othman
Âge : 24
Localisation : France, Aveyron (Midi Pyrénées)

Informations professionnelles :
Activité : Administrateur système et base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2007
Messages : 456
Points : 276
Points : 276
Envoyer un message via Skype™ à DBA_OCP
Bonjour,

Faites un screen du retour de votre requête d'un peu du contenu des tables.

En plus, vous utilisez deux tables et aucune jointure à ce que je vois ?

...

EDIT : Des alias aussi simplifieront la tache de compréhension.
DBA_OCP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 21h49   #3
Invité de passage
 
Inscription : février 2011
Messages : 10
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 10
Points : 0
Points : 0
Envoyer un message via Skype™ à cecilebh
Bonsoir, celle-la est ma première requête :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
SELECT DISTINCT(f_fac.cd_facid),
lig_date,
fac_num,
cd_soin,
cd_forf,
cd_abon,
cd_bout,
cd_reg 
FROM f_fac LEFT JOIN f_lig 
ON f_lig.cd_facid=f_fac.cd_facid 
WHERE fac_num IS NULL 
AND lig_date<'31/12/2005';
et le select est exact.
Images attachées
Type de fichier : jpg Capture.JPG (93,0 Ko, 2 affichages)
cecilebh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2011, 08h41   #4
Invité de passage
 
Inscription : février 2011
Messages : 10
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 10
Points : 0
Points : 0
Envoyer un message via Skype™ à cecilebh
ou bien comme cela ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
SELECT DISTINCT(f_fac.cd_facid) Idfacture,
lig_date dateLigne,
fac_num numerofacture,
cd_soin lignesoin,
cd_forf ligneforfait,
cd_abon ligneabonnement,
cd_bout ligneboutique,
cd_reg lignereglement 
FROM f_fac LEFT JOIN f_lig 
ON f_lig.cd_facid=f_fac.cd_facid 
WHERE fac_num IS NULL 
AND lig_date<'31/12/2005';
Images attachées
Type de fichier : jpg Capture.JPG (91,8 Ko, 5 affichages)
cecilebh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2011, 20h57   #5
Membre Expert
 
Avatar de zoom61
 
Homme Vincent ...
Passionné d'informatique
Inscription : janvier 2005
Messages : 1 217
Détails du profil
Informations personnelles :
Nom : Homme Vincent ...
Âge : 39
Localisation : France, Haute Vienne (Limousin)

Informations professionnelles :
Activité : Passionné d'informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2005
Messages : 1 217
Points : 1 506
Points : 1 506
Envoyer un message via Yahoo à zoom61 Envoyer un message via Skype™ à zoom61
Pour faire un delete il faut que tu utilises la syntaxe suivante :
Code :
DELETE * FROM table_supprimer WHERE champ IN (SELECT champ FROM table_reference INNER....)
Sinon tu ne pourras pas supprimer...
__________________
N'oubliez pas le Tag :

C'est en parvenant à nos fins par l'effort, en étant prêt à faire le sacrifice de profits immédiats en faveur du bien-être d'autrui à long terme, que nous parviendrons au bonheur caractérisé par la paix et le contentement authentique. [Dalaï Lama]
Je ne réponds pas aux messages privés s'ils sont liés à une question du forum

Mon site sur Developpez.com
zoom61 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2011, 19h22   #6
Invité de passage
 
Inscription : février 2011
Messages : 10
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 10
Points : 0
Points : 0
Envoyer un message via Skype™ à cecilebh
Bonjour,
Merci
j'ai fait ce que vous m'avez demandé, mais j'ai une violation de contrainte

Citation:
Erreur SQL : ORA-02292: violation de contrainte (BALNEARIO.FK_F_LIG_LIG_FAC_F_FAC) d'intégrité - enregistrement fils existant
02292. 00000 - "integrity constraint (%s.%s) violated - child record found"
*Cause: attempted to delete a parent key value that had a foreign
dependency.
*Action: delete dependencies first then parent or disable constraint.
je crois que je vais devoir les supprimer à la main.... qu'en est-il ?

Merci beaucoup
cecilebh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 02h50   #7
Membre confirmé
 
Homme Ot Othman
Administrateur système et base de données
Inscription : décembre 2007
Messages : 456
Détails du profil
Informations personnelles :
Nom : Homme Ot Othman
Âge : 24
Localisation : France, Aveyron (Midi Pyrénées)

Informations professionnelles :
Activité : Administrateur système et base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2007
Messages : 456
Points : 276
Points : 276
Envoyer un message via Skype™ à DBA_OCP
Il faut identifier la contrainte d'intégrité et utiliser un delete en cascade sinon supprimer les champs fils puis parents.

Faites une recherche sur la syntaxe exacte de la commande DELETE.
DBA_OCP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 07h41   #8
Membre Expert
 
Avatar de zoom61
 
Homme Vincent ...
Passionné d'informatique
Inscription : janvier 2005
Messages : 1 217
Détails du profil
Informations personnelles :
Nom : Homme Vincent ...
Âge : 39
Localisation : France, Haute Vienne (Limousin)

Informations professionnelles :
Activité : Passionné d'informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2005
Messages : 1 217
Points : 1 506
Points : 1 506
Envoyer un message via Yahoo à zoom61 Envoyer un message via Skype™ à zoom61
De ce que je vois de ton code, as-tu essayé cela :
Code :
1
2
3
4
5
6
DELETE * FROM f_lig WHERE f_lig.cd_facid
IN (SELECT DISTINCT(f_lig.cd_facid)
FROM f_lig,f_fac
WHERE fac_num IS NULL AND lig_date='13/07/2005'
AND lig_tp_lig <>'G' AND lig_tp_lig <>'A'
AND cd_reg IS NULL AND fac_annul IS NULL;)
Mais tu dois avoir un problème avec des indépendances. Tu ne pourras supprimer ces lignes que quand tu les auras supprimées dans une autre table... Les données qui sont dans cette table doivent servir dans une autre, et c'est pour cela que tu ne peux pas les supprimer !!!
__________________
N'oubliez pas le Tag :

C'est en parvenant à nos fins par l'effort, en étant prêt à faire le sacrifice de profits immédiats en faveur du bien-être d'autrui à long terme, que nous parviendrons au bonheur caractérisé par la paix et le contentement authentique. [Dalaï Lama]
Je ne réponds pas aux messages privés s'ils sont liés à une question du forum

Mon site sur Developpez.com
zoom61 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 15h46   #9
Invité de passage
 
Inscription : février 2011
Messages : 10
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 10
Points : 0
Points : 0
Envoyer un message via Skype™ à cecilebh
en fait j'ai trouvé une solution pour contourner la contrainte.
dans les tables, les enregistrements cherchés ne peuvent se trouver qu'avec la condition d'un champ de la table fac et la condition d'un autre champ de la table lig.... c'est le chat qui se mort la queue

j'ai donc fait un update sur un champ non utilisé de chacune de ces tables, pour ensuite aller supprimer mes enregistrements dans l'ordre, lig puis fac.

ça vous semble ok dans le doc joint ?

merci,
et merci pour votre aide.
Fichiers attachés
Type de fichier : txt Nouveau document texte.txt (1,4 Ko, 9 affichages)
cecilebh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 16h01   #10
Membre Expert
 
Avatar de zoom61
 
Homme Vincent ...
Passionné d'informatique
Inscription : janvier 2005
Messages : 1 217
Détails du profil
Informations personnelles :
Nom : Homme Vincent ...
Âge : 39
Localisation : France, Haute Vienne (Limousin)

Informations professionnelles :
Activité : Passionné d'informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2005
Messages : 1 217
Points : 1 506
Points : 1 506
Envoyer un message via Yahoo à zoom61 Envoyer un message via Skype™ à zoom61
Cela me semble correct...
__________________
N'oubliez pas le Tag :

C'est en parvenant à nos fins par l'effort, en étant prêt à faire le sacrifice de profits immédiats en faveur du bien-être d'autrui à long terme, que nous parviendrons au bonheur caractérisé par la paix et le contentement authentique. [Dalaï Lama]
Je ne réponds pas aux messages privés s'ils sont liés à une question du forum

Mon site sur Developpez.com
zoom61 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 17h10   #11
Invité de passage
 
Inscription : février 2011
Messages : 10
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 10
Points : 0
Points : 0
Envoyer un message via Skype™ à cecilebh
j'ai fait un test, et c'est concluant.
Merci encore .
Bonne soirée
cecilebh est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h03.


 
 
 
 
Partenaires

Hébergement Web