Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
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 14/12/2010, 09h53   #1
Membre Expert
 
Homme Benoît
Inscription : février 2003
Messages : 1 188
Détails du profil
Informations personnelles :
Nom : Homme Benoît
Âge : 31
Localisation : Belgique

Informations forums :
Inscription : février 2003
Messages : 1 188
Points : 1 762
Points : 1 762
Par défaut Delete records non référencés ?

Bonjour,

J'aimerai effacer tous les records qui n'ont plus de référence, en général j'utilise un NOT IN table parent mais ici j'ai une 24 tables qui y font référence

Exemple:

Table Location (pk_location,nom,...)
Table Chargement(pk_chargement,fk_location,....)
Table Dechargement(pk_dechargement,fk_location,...)
Table Stop(pk_location,fk_location,...)

Donc j'aimerais effacer les locations qui ne sont ni dans chargement,ni dechargement,ni dans stop


Il y a-t-il une autre technique que le not in?
__________________
Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes
BenoitM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 10h27   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 766
Points : 17 766
Code :
1
2
3
4
5
6
7
8
9
10
NOT IN (SELECT MaClef
        FROM   chargement
        UNION ALL
        SELECT MaClef
        FROM   dechargement
        UNION ALL
        SELECT MaClef
        FROM   stop 
        ...
       )
A +

Et pour un cours sur SQL, mon site web, comme mon bouquin peuvent vous aider !!!
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 10h31   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 977
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 977
Points : 18 221
Points : 18 221
Envoyer un message via MSN à CinePhil
Vérifie si cette sélection correspond bien à ce que tu veux effacer :
Code :
1
2
3
4
5
6
7
8
SELECT l.pk_location
FROM Location l
LEFT OUTER JOIN Chargement c ON c.fk_location = l.pk_location
LEFT OUTER JOIN Dechargement d ON d.fk_location = l.pk_location
LEFT OUTER JOIN Stop s ON s.fk_location = l.pk_location
WHERE c.fk_location IS NULL
    AND d.fk_location IS NULL
    AND s.fk_location IS NULL
Puis si c'est bon, transforme en DELETE :
Code :
1
2
3
4
5
6
7
DELETE FROM Location l
LEFT OUTER JOIN Chargement c ON c.fk_location = l.pk_location
LEFT OUTER JOIN Dechargement d ON d.fk_location = l.pk_location
LEFT OUTER JOIN Stop s ON s.fk_location = l.pk_location
WHERE c.fk_location IS NULL
    AND d.fk_location IS NULL
    AND s.fk_location IS NULL
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 13h29   #4
Membre Expert
 
Homme Benoît
Inscription : février 2003
Messages : 1 188
Détails du profil
Informations personnelles :
Nom : Homme Benoît
Âge : 31
Localisation : Belgique

Informations forums :
Inscription : février 2003
Messages : 1 188
Points : 1 762
Points : 1 762
J'ai appliqué la solution de SQLpro
(sans le union all je vois pas l'utilité dans mon cas )

La solution de Cinephil est-elle plus rapide?


et autre sous question il y a-t-il une différence entre le NOT IN et NOT EXIST?
__________________
Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes
BenoitM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 13h54   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 977
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 977
Points : 18 221
Points : 18 221
Envoyer un message via MSN à CinePhil
Derrière IN ou NOT IN, on met plutôt une liste limitée de valeurs connues
Code :
WHERE la_colonne NOT IN (1, 5, 45)
Derrière EXISTS ou NOT EXISTS, on met plutôt une requête comme celle que j'ai faite.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 14h00   #6
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 766
Points : 17 766
pas d'accord, mais l'avantage du NOT EXISTS c'est qu'il peut s'avérer plus rapide en exécution.

Dans ce cas :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
DELETE FROM MaTable
WHERE NOT EXISTS (SELECT MaClef
                  FROM   (SELECT MaClef
                          FROM   chargement
                          UNION ALL
                          SELECT MaClef
                          FROM   dechargement
                          UNION ALL
                          SELECT MaClef
                          FROM   stop 
                          ...
                         ) AS T
                  WHERE  T.MaClef = MaTable.MaClef)
Enfin, le UNION ALL ira plus vite que le UNION tout court....

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 14h04   #7
Membre Expert
 
Homme Benoît
Inscription : février 2003
Messages : 1 188
Détails du profil
Informations personnelles :
Nom : Homme Benoît
Âge : 31
Localisation : Belgique

Informations forums :
Inscription : février 2003
Messages : 1 188
Points : 1 762
Points : 1 762
Citation:
Envoyé par SQLpro Voir le message
Enfin, le UNION ALL ira plus vite que le UNION tout court....
Ah oki j'aurai cru l'inverse vu qu'il allait avoir plusieurs fois la même valeur
__________________
Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes
BenoitM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 14h11   #8
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 977
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 977
Points : 18 221
Points : 18 221
Envoyer un message via MSN à CinePhil
UNION ALL donne toutes les lignes sans faire de dédoublonnage donc moins de boulot.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 14h24   #9
Membre Expert
 
Homme Benoît
Inscription : février 2003
Messages : 1 188
Détails du profil
Informations personnelles :
Nom : Homme Benoît
Âge : 31
Localisation : Belgique

Informations forums :
Inscription : février 2003
Messages : 1 188
Points : 1 762
Points : 1 762
Merci a vous deux
__________________
Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes
BenoitM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 15h29   #10
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 766
Points : 17 766
Citation:
Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes
Et en plus tu es Belge.... ;-)

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 01
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web