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

[PostrgeSQL] heritage et alias de colonne

11 réponses
Avatar
Etienne
Salut.

bon j'ai rien trouvé dans la doc dont c'est surement impossible, mais ca
coute rien de demander.

est ce qu'il est possible de créer une sorte d'alias sur un colonne pour
y acceder vie un autre nom.

je m'explique.

j'ai deux tables

CREATE "pere" (
"idpere" serial NOT NULL,
"data" text,
PRIMARY key (idpere)
);

CREATE "fils" (
"ext1" text,
"ext2" text,
PRIMARY key (idpere)
) INHERITS (pere);

Mon problème est que j'aimerai pouvoir utilise idfils (qui n'existe pas)
a la place de idpere.

Genre je voudrai pouvoir faire un
SELECT * FROM fils WHERE idfils = 115;
a la place de
SELECT * FROM fils WHERE idpere = 115;

alors pourquoi je veux faire ca ?
Ben tout simplement parce que par convention j'utilise toujours comme
cle primaire le mon de la table précédé de "id"

hors, là en fonction que ma table est hérité ou non, ce fonctionne ou ca
ne fonctionne pas.
Ca simplifierai aussi la lecture des jointures qui lorsqu'elles sont
complexe on un gros paquet de idpere dans tous les coins...

Ca serait bien que ce soit possible, ce serait meme encore mieux si on
pouvait force l'utilisation de idfils a la place de idpere lorsqu'on
accède a la table fils...

Etienne

10 réponses

1 2
Avatar
helios
Etienne a écrit :
Salut.

bon j'ai rien trouvé dans la doc dont c'est surement impossible, mais
ca coute rien de demander.

est ce qu'il est possible de créer une sorte d'alias sur un colonne
pour y acceder vie un autre nom.

je m'explique.

j'ai deux tables

CREATE "pere" (
"idpere" serial NOT NULL,
"data" text,
PRIMARY key (idpere)
);

CREATE "fils" (
"ext1" text,
"ext2" text,
PRIMARY key (idpere)
) INHERITS (pere);

Mon problème est que j'aimerai pouvoir utilise idfils (qui n'existe
pas) a la place de idpere.

Genre je voudrai pouvoir faire un
SELECT * FROM fils WHERE idfils = 115;
a la place de
SELECT * FROM fils WHERE idpere = 115;

alors pourquoi je veux faire ca ?
Ben tout simplement parce que par convention j'utilise toujours comme
cle primaire le mon de la table précédé de "id"

hors, là en fonction que ma table est hérité ou non, ce fonctionne ou
ca ne fonctionne pas.
Ca simplifierai aussi la lecture des jointures qui lorsqu'elles sont
complexe on un gros paquet de idpere dans tous les coins...

Ca serait bien que ce soit possible, ce serait meme encore mieux si on
pouvait force l'utilisation de idfils a la place de idpere lorsqu'on
accède a la table fils...

Etienne




en multivalué c'est possible par le dico du fichier
Avatar
Sebastien Lardiere
Le 25/08/2010 12:09, Etienne a écrit :
Salut.

bon j'ai rien trouvé dans la doc dont c'est surement impossible, mais ca
coute rien de demander.

est ce qu'il est possible de créer une sorte d'alias sur un colonne pour
y acceder vie un autre nom.

je m'explique.

j'ai deux tables

CREATE "pere" (
"idpere" serial NOT NULL,
"data" text,
PRIMARY key (idpere)
);

CREATE "fils" (
"ext1" text,
"ext2" text,
PRIMARY key (idpere)
) INHERITS (pere);

Mon problème est que j'aimerai pouvoir utilise idfils (qui n'existe pas)
a la place de idpere.

Genre je voudrai pouvoir faire un
SELECT * FROM fils WHERE idfils = 115;
a la place de
SELECT * FROM fils WHERE idpere = 115;



Il suffit de faire une vue, non ?

create view v_fils as select idpere as idfils, date, ext1, ext3 from fils ;

Apres, il faut juste n'utiliser que la vue

--
Sébastien
Avatar
SQLpro
bonjour,

l'utilisation du "SELECT *" est un aberration et ne doit être réservé
que pour la mise au point du code, ou bien dans l'appel à une vue ou CTE.

Dès lors, vos requêtes doivent s'écrire :

SELECT idpere AS idfils, data, ext1, ext2
FROM fils
WHERE idpere = 115;

Si vous vous focalisez sur le nom de colonne, alors vous pouvez :

1) créer une vue comme suggérée :

CREATE VIEW V_fils
AS
SELECT idpere AS idfils, data, ext1, ext2
FROM fils;

sur laquelle vous pourrez faire :

SELECT *
FROM fils
WHERE idfils = 115;

2) utiliser une CTE comme ceci :

WITH T AS
(SELECT idpere AS idfils, data, ext1, ext2
FROM fils)
SELECT *
FROM T
WHERE idfils = 115;

A +


--
Frédéric BROUARD - expert SGBDR et SQL - MVP SQL Server - 06 11 86 40 66
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Enseignant Arts & Métiers PACA, ISEN Toulon et CESI/EXIA Aix en Provence
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************


Le 25/08/2010 12:09, Etienne a écrit :
Salut.

bon j'ai rien trouvé dans la doc dont c'est surement impossible, mais ca
coute rien de demander.

est ce qu'il est possible de créer une sorte d'alias sur un colonne pour
y acceder vie un autre nom.

je m'explique.

j'ai deux tables

CREATE "pere" (
"idpere" serial NOT NULL,
"data" text,
PRIMARY key (idpere)
);

CREATE "fils" (
"ext1" text,
"ext2" text,
PRIMARY key (idpere)
) INHERITS (pere);

Mon problème est que j'aimerai pouvoir utilise idfils (qui n'existe pas)
a la place de idpere.

Genre je voudrai pouvoir faire un
SELECT * FROM fils WHERE idfils = 115;
a la place de
SELECT * FROM fils WHERE idpere = 115;

alors pourquoi je veux faire ca ?
Ben tout simplement parce que par convention j'utilise toujours comme
cle primaire le mon de la table précédé de "id"

hors, là en fonction que ma table est hérité ou non, ce fonctionne ou ca
ne fonctionne pas.
Ca simplifierai aussi la lecture des jointures qui lorsqu'elles sont
complexe on un gros paquet de idpere dans tous les coins...

Ca serait bien que ce soit possible, ce serait meme encore mieux si on
pouvait force l'utilisation de idfils a la place de idpere lorsqu'on
accède a la table fils...

Etienne
Avatar
helios
SQLpro a écrit :
bonjour,

l'utilisation du "SELECT *" est un aberration et ne doit être réservé
que pour la mise au point du code, ou bien dans l'appel à une vue ou CTE.




ah les aberrations de Fred




Dès lors, vos requêtes doivent s'écrire :

SELECT idpere AS idfils, data, ext1, ext2
FROM fils
WHERE idpere = 115;

Si vous vous focalisez sur le nom de colonne, alors vous pouvez :

1) créer une vue comme suggérée :

CREATE VIEW V_fils
AS
SELECT idpere AS idfils, data, ext1, ext2
FROM fils;

sur laquelle vous pourrez faire :

SELECT *
FROM fils
WHERE idfils = 115;

2) utiliser une CTE comme ceci :

WITH T AS
(SELECT idpere AS idfils, data, ext1, ext2
FROM fils)
SELECT *
FROM T
WHERE idfils = 115;

A +


Avatar
JKB
Le Thu, 26 Aug 2010 14:20:06 +0200,
helios écrivait :
SQLpro a écrit :
bonjour,

l'utilisation du "SELECT *" est un aberration et ne doit être réservé
que pour la mise au point du code, ou bien dans l'appel à une vue ou CTE.




ah les aberrations de Fred



J'aimerais boen que tu nous expliques ô notre maître à tous en quoi
c'est une aberration !

Rigolo !

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
helios
JKB a écrit :
Le Thu, 26 Aug 2010 14:20:06 +0200,
helios écrivait :

SQLpro a écrit :

bonjour,

l'utilisation du "SELECT *" est un aberration et ne doit être réservé
que pour la mise au point du code, ou bien dans l'appel à une vue ou CTE.




ah les aberrations de Fred




J'aimerais boen que tu nous expliques ô notre maître à tous en quoi
c'est une aberration !

Rigolo !

JKB




FRED n'est pas a une aberration pres puisqu'il est lui meme une
aberration (des recherches sur cet individu vous le prouverons) et à un
calendrier qui est une aberration puisque compte moins de 65536 jours
depuis la reforme du calendrier gregorien

http://www.linternaute.com/dictionnaire/fr/definition/aberration/

PS pour Fred en France l'escuse de vérité absoud la diffamation car
c'est la calomnie qui peut etre sanctionné et non la médisance donc ce
message est une diffamation mais c'est aussi une médisance donc cela
n'est pas sanctionable
Avatar
JKB
Le Thu, 26 Aug 2010 14:36:03 +0200,
helios écrivait :
JKB a écrit :
Le Thu, 26 Aug 2010 14:20:06 +0200,
helios écrivait :

SQLpro a écrit :

bonjour,

l'utilisation du "SELECT *" est un aberration et ne doit être réservé
que pour la mise au point du code, ou bien dans l'appel à une vue ou CTE.




ah les aberrations de Fred




J'aimerais boen que tu nous expliques ô notre maître à tous en quoi
c'est une aberration !

Rigolo !

JKB




FRED n'est pas a une aberration pres puisqu'il est lui meme une
aberration (des recherches sur cet individu vous le prouverons) et à un
calendrier qui est une aberration puisque compte moins de 65536 jours
depuis la reforme du calendrier gregorien



On n'est pas en train de faire un concours de conneries, parce que
tu le gagnerais très certainement. JE TE POSE LA QUESTION : EN QUOI
CE QU'IL A DIT JUSTE LA EST UNE ABERRATION ?

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
helios
JKB a écrit :
Le Thu, 26 Aug 2010 14:36:03 +0200,
helios écrivait :

JKB a écrit :

Le Thu, 26 Aug 2010 14:20:06 +0200,
helios écrivait :


SQLpro a écrit :


bonjour,

l'utilisation du "SELECT *" est un aberration et ne doit être réservé
que pour la mise au point du code, ou bien dans l'appel à une vue ou CTE.





ah les aberrations de Fred




J'aimerais boen que tu nous expliques ô notre maître à tous en quoi
c'est une aberration !

Rigolo !

JKB





FRED n'est pas a une aberration pres puisqu'il est lui meme une
aberration (des recherches sur cet individu vous le prouverons) et à un
calendrier qui est une aberration puisque compte moins de 65536 jours
depuis la reforme du calendrier gregorien




On n'est pas en train de faire un concours de conneries, parce que
tu le gagnerais très certainement. JE TE POSE LA QUESTION : EN QUOI
CE QU'IL A DIT JUSTE LA EST UNE ABERRATION ?

JKB




je n'ai pas repondre a mec qui pretend avoir travaillé dans une boite au
services informatique et ne connait pas le type de SGBD qui y est present

</troll>
Avatar
JKB
Le Thu, 26 Aug 2010 14:49:11 +0200,
helios écrivait :
Le Thu, 26 Aug 2010 14:36:03 +0200,
helios écrivait :

JKB a écrit :

Le Thu, 26 Aug 2010 14:20:06 +0200,
helios écrivait :


SQLpro a écrit :


bonjour,

l'utilisation du "SELECT *" est un aberration et ne doit être réservé
que pour la mise au point du code, ou bien dans l'appel à une vue ou CTE.





ah les aberrations de Fred




J'aimerais boen que tu nous expliques ô notre maître à tous en quoi
c'est une aberration !

Rigolo !

JKB





FRED n'est pas a une aberration pres puisqu'il est lui meme une
aberration (des recherches sur cet individu vous le prouverons) et à un
calendrier qui est une aberration puisque compte moins de 65536 jours
depuis la reforme du calendrier gregorien




On n'est pas en train de faire un concours de conneries, parce que
tu le gagnerais très certainement. JE TE POSE LA QUESTION : EN QUOI
CE QU'IL A DIT JUSTE LA EST UNE ABERRATION ?

JKB




je n'ai pas repondre a mec qui pretend avoir travaillé dans une boite au
services informatique et ne connait pas le type de SGBD qui y est present



Mais qu'il est con...

Retour dans ma boitakon.

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
WebShaker
Le 26/08/2010 09:48, Sebastien Lardiere a écrit :
Il suffit de faire une vue, non ?
create view v_fils as select idpere as idfils, date, ext1, ext3 from fils ;



Ah oui c'est une idée...
c'est pas l'idéal mais c'est vrai que ca fonctionne...

Etienne
1 2