Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Nettoyer une bas de données postgreSQL

9 réponses
Avatar
WebShaker
Salut.

J'ai récupéré une base de données postgres ou aucune contrainte d'intégrité
n'existait.
Je les ai donc créée.

J'aimerai maintenant lister tous les enregistrement d'une table qui devrait
être dépendant d'un autre table et que ne le sont pas !

pour etre clair j'ai les deux table suivantes:
CREATE TABLE "resource" (
"idresource" serial NOT NULL,
"desc" text,
PRIMARY key (idresource)
);

CREATE TABLE "trucmuch" [
"idtrucmuch" serial NOT NULL,
"iddesc" integer,
PRIMARY key (idtrucmuch),
FOREIGN key (iddesc) REFERENCES resource (idresource)
);

j'aimerai trouver les idresource qui ne sont pas liée a la table trucmuch.
Bon evidement j'ai des dizaine de table qui sont liée a la table resource.
donc je ne peux pas simplement faire une requete avec une jointure.

pour le moment je n'ai pas trouvé d'autre solution que pour chaque
idresource
- commencer une transaction.
- faire un delete de l'idresource.
- regarder si le delete a fonctionné.
- faire un rollback.

voila ca me donne les resources non associée via une contrainte
d'intégrité...

mais je cherche une methode peut etre un peu moins bourrine.

Merci
a+
Etienne

9 réponses

Avatar
SQLpro
Une simple requête suffit :

DELETE FROM trucmuch
WHERE iddesc NOT IN (SELECT idresource
FROM resource)

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************


WebShaker a écrit :
Salut.

J'ai récupéré une base de données postgres ou aucune contrainte d'intégrité
n'existait.
Je les ai donc créée.

J'aimerai maintenant lister tous les enregistrement d'une table qui devrait
être dépendant d'un autre table et que ne le sont pas !

pour etre clair j'ai les deux table suivantes:
CREATE TABLE "resource" (
"idresource" serial NOT NULL,
"desc" text,
PRIMARY key (idresource)
);

CREATE TABLE "trucmuch" [
"idtrucmuch" serial NOT NULL,
"iddesc" integer,
PRIMARY key (idtrucmuch),
FOREIGN key (iddesc) REFERENCES resource (idresource)
);

j'aimerai trouver les idresource qui ne sont pas liée a la table trucmuch.
Bon evidement j'ai des dizaine de table qui sont liée a la table resource.
donc je ne peux pas simplement faire une requete avec une jointure.

pour le moment je n'ai pas trouvé d'autre solution que pour chaque
idresource
- commencer une transaction.
- faire un delete de l'idresource.
- regarder si le delete a fonctionné.
- faire un rollback.

voila ca me donne les resources non associée via une contrainte
d'intégrité...

mais je cherche une methode peut etre un peu moins bourrine.

Merci
a+
Etienne


Avatar
WebShaker
Attention, je ne cherche pas a supprimer les enregistrements.
mais a connaitre les idresource qui pourraient l'être.

dans le but de contrôler leur contenu avant de les supprimer.

Etienne

"SQLpro" a écrit dans le message de news:
4b8cc61a$0$10081$
Une simple requête suffit :

DELETE FROM trucmuch
WHERE iddesc NOT IN (SELECT idresource
FROM resource)

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************


WebShaker a écrit :
Salut.

J'ai récupéré une base de données postgres ou aucune contrainte
d'intégrité n'existait.
Je les ai donc créée.

J'aimerai maintenant lister tous les enregistrement d'une table qui
devrait être dépendant d'un autre table et que ne le sont pas !

pour etre clair j'ai les deux table suivantes:
CREATE TABLE "resource" (
"idresource" serial NOT NULL,
"desc" text,
PRIMARY key (idresource)
);

CREATE TABLE "trucmuch" [
"idtrucmuch" serial NOT NULL,
"iddesc" integer,
PRIMARY key (idtrucmuch),
FOREIGN key (iddesc) REFERENCES resource (idresource)
);

j'aimerai trouver les idresource qui ne sont pas liée a la table
trucmuch.
Bon evidement j'ai des dizaine de table qui sont liée a la table
resource. donc je ne peux pas simplement faire une requete avec une
jointure.

pour le moment je n'ai pas trouvé d'autre solution que pour chaque
idresource
- commencer une transaction.
- faire un delete de l'idresource.
- regarder si le delete a fonctionné.
- faire un rollback.

voila ca me donne les resources non associée via une contrainte
d'intégrité...

mais je cherche une methode peut etre un peu moins bourrine.

Merci
a+
Etienne
Avatar
Alcovia
Le 02/03/2010 10:28, WebShaker a écrit :
Attention, je ne cherche pas a supprimer les enregistrements.
mais a connaitre les idresource qui pourraient l'être.

dans le but de contrôler leur contenu avant de les supprimer.



et bien remplace le DELETE par un SELECT
Avatar
WebShaker
"Alcovia" a écrit dans le message de news:
4b8cdbaa$0$16379$
Le 02/03/2010 10:28, WebShaker a écrit :
Attention, je ne cherche pas a supprimer les enregistrements.
mais a connaitre les idresource qui pourraient l'être.

dans le but de contrôler leur contenu avant de les supprimer.



et bien remplace le DELETE par un SELECT



ben non la je vais les avoir tous.
Avatar
SQLpro
WebShaker a écrit :
"Alcovia" a écrit dans le message de news:
4b8cdbaa$0$16379$
Le 02/03/2010 10:28, WebShaker a écrit :
Attention, je ne cherche pas a supprimer les enregistrements.
mais a connaitre les idresource qui pourraient l'être.

dans le but de contrôler leur contenu avant de les supprimer.


et bien remplace le DELETE par un SELECT



ben non la je vais les avoir tous.




SELECT *
FROM trucmuch
WHERE iddesc NOT IN (SELECT idresource
FROM resource)

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************
Avatar
WebShaker
SELECT *
FROM trucmuch
WHERE iddesc NOT IN (SELECT idresource
FROM resource)



Nan c'est toujours pas bon.

comme je l'ai dit.
la table resource peut etre utilisée dans plein d'autre tables. elle
contient les traductions de tous les champ text du projet.

on a donc trucmuch, mai aussi
trucmuch1,
trucmuch2,
trucmuch3,
...

donc je pense que la solution n'est peut etre pas dans une requete SQL
standard mais plutot dans quelques chose utilisant le structure propre a
postgresql...

Etienne
Avatar
SQLpro
Alors soyez plus précis :
donnez nous des exemples concrets avec
1) vos tables sous forme DDL (CREATE
2) un jeu d'essais sous forme INSERT
3) une idée du résultat

Sachez qu'aucune chose est impossible sous forme de requête SQL parce
que SQL est un langage complet au sens de la machine de turing !

A +

WebShaker a écrit :
SELECT *
FROM trucmuch
WHERE iddesc NOT IN (SELECT idresource
FROM resource)



Nan c'est toujours pas bon.

comme je l'ai dit.
la table resource peut etre utilisée dans plein d'autre tables. elle
contient les traductions de tous les champ text du projet.

on a donc trucmuch, mai aussi
trucmuch1,
trucmuch2,
trucmuch3,
...

donc je pense que la solution n'est peut etre pas dans une requete SQL
standard mais plutot dans quelques chose utilisant le structure propre a
postgresql...

Etienne






--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************
Avatar
helios
SQLpro a écrit :
Alors soyez plus précis :
donnez nous des exemples concrets avec
1) vos tables sous forme DDL (CREATE
2) un jeu d'essais sous forme INSERT
3) une idée du résultat

Sachez qu'aucune chose est impossible sous forme de requête SQL parce
que SQL est un langage complet au sens de la machine de turing !

A +





il est même possible d'après un certain auteur de livre sur SQL de coder
avec SQL toute les dates depuis Jesus Christ jusque nos jours sur 2
octets, c'est trés fort d'arriver à coder plus 733650 valeurs sur deux
octet (2^16 ou 65536)mais SQL est miraculeux :-)

attention l'auteur va faire un procès en diffamation si on ne croit pas
au miracle de SQL
Avatar
Patrick Mevzek
Le Wed, 03 Mar 2010 08:58:53 +0100, WebShaker a écrit:
on a donc trucmuch, mai aussi
trucmuch1,
trucmuch2,
trucmuch3,
...



SELECT * FROM resource
WHERE idresource NOT IN
(
SELECT iddesc FROM trucmuch
UNION
SELECT iddesc FROM trucmuch1
UNION
SELECT iddesc FROM trucmuch2
)

--
Patrick Mevzek . . . . . . . . . . . . . . Dot and Co
<http://www.dotandco.net/&gt; <http://www.dotandco.com/&gt;
<http://www.dotandco.net/ressources/icann_registrars/prices&gt;
<http://icann-registrars-life.dotandco.net/&gt;