boucher les trous

5 réponses
Avatar
->Sylvain
Bonjour,

L'intitulé n'est pas très clair, mais je cherce à faire quelque chose en
SQL que j'ai un peu de mal à expliquer, alors voici un exemple :
j'ai une table où se trouve un champ "ordre" (entier, positif).
Dans cette table des enregistrement ont été supprimés, et je voudrais
réinitialiser les valeurs de ordre pour tous les enregistrement pour
qu'ils soient bien consécutifs, avec un pas de 1, en gardant bien sur
l'ordre initial :
par exemple
1
8
9
13
15

donnerait :

1
2
3
4
5

Avez vous une quelconque idée de la façon de faire ça (si possible sans
utiliser de tables temporaires, je n'ai pas les droits CREATE)

Merci d'avance

Sylvain

5 réponses

Avatar
->Sylvain
Fred BROUARD - SQLpro a écrit :

alors à quoi est destiné ce champ si c'est pour refaire un ordre déjà
existant c'est encore plus absurde !!!



Voyons, voyons... Un peu de tenue.
Je n'ai pas la prétention d'être un expert en terme de conception de
BDD, donc, je veux bien que tu m'explique - et me dépatouille - mes
absurdités.

J'utilise cette colonne pour trier mes enregistrements dans un ordre qui
n'est pas existant sur les autres colonnes (c'est à dire ni
lexicographique, ni alphabétique, ni numérique).
[C'est un ordre basé sur la hiérarchie au sein de l'entreprise des
personnes stockées dans la table.]
Comme cet ordre est sujet à modifications (promotions,
rétrogradations...), je voudrais avoir une suite continue d'entiers dans
cette colonne, une fois le tri opéré sur celle-ci, afin de pouvoir
réaliser ces modifications simplement.

Les enregistrements ne sont PAS ordonnés (contrairement à ce que pouvait
laisser croire mon premier post, j'en conviens, mais j'ai corrigé le tir
ensuite).
Il n'y a PAS d'ordre déjà existant, c'est pour cela que la colonne
"ordre" existe.
(j'ai d'ailleurs cru comprendre que se fier à l'ordre dans lequel se
*présentent* les enregistrements dans la base n'était que modérément
digne de confiance, merci d'infirmer le cas échéant).

Voila, voila,

Merci.

->Sylvain<-
Avatar
Fred BROUARD - SQLpro
Effectivement, avec des explications on peut mieux comprendre ton intention.

Malheureusement il n'existe AUCUNE notion d'ordre dans les bases de données.

La même requête exécutée plusieurs fois sans précision de clause ORDER
BY ne présentera pas les données dans le même ordre à coup sûr !
Il n'y a donc aucune assurance d'utiliser le mécanisme que tu voulais dfaire

A lire sur le sujet : http://sqlpro.developpez.com/SQL_AZ_1.html
extrait du paragraphe 3
"Il existe une grande indépendance entre la couche abstraite que
constitue le SGBDR et la couche physique que sont le ou les fichiers
constituant une base de données. En l'occurrence il est déraisonnable de
croire que les fichiers sont arrangés dans l'ordre des colonnes lors de
la création des tables et que les données sont rangées dans l'ordre de
leur insertion ou de la valeur de la clef."

Par conséquent il te faut créer ton propre odonnacement en ajoutant une
colonne spécifique, même s'il y a des modifications régulières à faire.

A +

->Sylvain<- a écrit:
Fred BROUARD - SQLpro a écrit :

alors à quoi est destiné ce champ si c'est pour refaire un ordre déjà
existant c'est encore plus absurde !!!



Voyons, voyons... Un peu de tenue.
Je n'ai pas la prétention d'être un expert en terme de conception de
BDD, donc, je veux bien que tu m'explique - et me dépatouille - mes
absurdités.

J'utilise cette colonne pour trier mes enregistrements dans un ordre qui
n'est pas existant sur les autres colonnes (c'est à dire ni
lexicographique, ni alphabétique, ni numérique).
[C'est un ordre basé sur la hiérarchie au sein de l'entreprise des
personnes stockées dans la table.]
Comme cet ordre est sujet à modifications (promotions,
rétrogradations...), je voudrais avoir une suite continue d'entiers dans
cette colonne, une fois le tri opéré sur celle-ci, afin de pouvoir
réaliser ces modifications simplement.

Les enregistrements ne sont PAS ordonnés (contrairement à ce que pouvait
laisser croire mon premier post, j'en conviens, mais j'ai corrigé le tir
ensuite).
Il n'y a PAS d'ordre déjà existant, c'est pour cela que la colonne
"ordre" existe.
(j'ai d'ailleurs cru comprendre que se fier à l'ordre dans lequel se
*présentent* les enregistrements dans la base n'était que modérément
digne de confiance, merci d'infirmer le cas échéant).

Voila, voila,

Merci.

->Sylvain<-




--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
Avatar
->Sylvain
Fred BROUARD - SQLpro a écrit :

Par conséquent il te faut créer ton propre odonnacement en ajoutant
une colonne spécifique, même s'il y a des modifications régulières à
faire.



Bien, bien, bien.
C'est ce que j'ai fait depuis le début, merci de cette réponse pour le
moins "technocratique".
Donc j'en reviens à ma question de départ :
Est il possible en SQL d'enlever les trous dans cette colonne ?

->Sylvain<-
Avatar
Fred BROUARD - SQLpro
oui et non.

Faire un update dans une telle colonne est ... catastrophique.

En revanche, rajouter une colonne qui numérote de 1 à n, n étant le
nombre de ligne est possible, à condition que dans l'ensemble des tuples
des colonnes permettent à la foi l'unicité et l'ordonnancement que tu
réclame.

Voir les exemples des pages 315 à 342 de mon bouquin !

A +

->Sylvain<- a écrit:
Fred BROUARD - SQLpro a écrit :

Par conséquent il te faut créer ton propre odonnacement en ajoutant
une colonne spécifique, même s'il y a des modifications régulières à
faire.




Bien, bien, bien.
C'est ce que j'ai fait depuis le début, merci de cette réponse pour le
moins "technocratique".
Donc j'en reviens à ma question de départ :
Est il possible en SQL d'enlever les trous dans cette colonne ?

->Sylvain<-




--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
Avatar
SR
Fred BROUARD - SQLpro wrote:
Voir les exemples des pages 315 à 342 de mon bouquin !


il est accessible gratuitement en ligne ?

--
SR