CREATE VIEW - 2fois le mm nom de colonne? - SQL/NoSQL - Programmation
Marsh Posté le 10-01-2006 à 17:30:49
How To Write Unmaintainable Code
Paragraphes 7, 13 et 15
Comme qui dirait (en introduction de ce document) :
Citation : |
Je parle évidement du magnifique :
"option.prix as optionPrice"
(comment je suis méchant en fait )
Marsh Posté le 11-01-2006 à 13:28:56
Ouaip c'est vrai qu'en termes de dénomination j'ai déjà fait mieux, mais bon c'était pour l'exemple à la va-vite, ma table est bien plus propre que ca et finalement j'ai choisi de renommer ma colonne par un nom plus explicite au lieu de laisser 2 colonnes de même nom, même si les tables étaient différentes. L'art est toujours difficile, la critique reste aisée. Mais pas mal le lien :-D j'adore le mix avec l'esperanto.
Marsh Posté le 10-01-2006 à 15:26:54
Hmm bon en fait j'allais poster une question, car google était resté muet sur le sujet et je n'avais pas trouvé d'antécédents sur le forum. Mais à mesure que je tapais une idée m'est venue et j'ai trouvé la soluce. Mais bon je poste quand même.
le CREATE VIEW ne m'autorise pas 2 x le mm nom de colonne(logique). Admettons que la view choisisse 2 colonnes de même nom dans 2 tableaux différents cela pose un problème.
exemple:
1 tableau "voiture" avec les colonnes id, nom, vitesse, prix.
1 tableau "options" avec les colonnes id, denomination, prix.
1 vue que l'on souhaite réaliser
CREATE VIEW v AS SELECT voiture.nom, voiture.prix, option.denomination, option.prix
FROM voiture JOIN ustensile ON voiture.id=options.id;
ne marchera pas à cause de la double occurence de la colonne prix.
il faut donc renommer la colonne prix qui sera affichée dans la vue.
CREATE VIEW v AS SELECT voiture.nom, voiture.prix, option.denomination, option.prix AS optionprice
FROM voiture JOIN ustensile ON voiture.id=options.id;
Il faut donc aussi utiliser le AS pour renommer la colonne comme on le ferait pour un tableau en cas de sous requête.
hmm c'est vrai que c con en fait... mais bon si jamais je me repose la question dans 10ans ben je retrouverais mon post.