Je cherche en vain à fusionner deux colonnes firstname + surname en finalname :
-- Création de la table
CREATE TABLE people(
id SERIAL PRIMARY KEY NOT NULL,
firstname VARCHAR(32) NOT NULL,
surname VARCHAR(32) NOT NULL
);
-- Peuplement de la table
INSERT INTO
people
VALUES
(1, 'Snow', 'The Hero'),
(2, 'Lightning', 'The Soldier'),
(3, 'Sazh', 'The Gunfighter'),
(4, 'Vanille', 'The Medic');
-- Fusion de la colonne firstname avec surname
SELECT firstname || ' ' || surname FROM people;
ALTER TABLE people
ADD COLUMN finalname
-- Résultat de SELECT firstname || ' ' || surname FROM people
-- à enregistrer dans la nouvelle colonne finalname
DROP COLUMN firstname, surname; -- Erreur de syntaxe ?
Le problème est que :
J'obtiens une erreur de syntaxe lorsque j'essaie de faire un DROP COLUMN firstname, surname
Je n'arrive pas à exprimer en SQL comment concaténer deux colonnes et récupérer le résultat de cette concaténation dans une nouvelle colonne ?
Après ton insertion avec les 2 colonnes présentes.
1/ Ajouter la colonne finalname avec DEFAUT '' car si tu mets NOT NULL, il se pourrait que tu aies une erreur puisque des valeurs sont déjà insérées. Tu aurais une 4ème colonne avec du texte vide ;
2/ Faire un UPDATE avec une requête qui dit :
POUR chaque ligne FAIRE :
concaténer firstname, ' ', surname
mettre la valeur concaténée dans fullname
3/ Supprimer les 2 colonnes.
L'erreur de syntaxe est peut-être dûe au fait qu'ALTER TABLE ne peut faire qu'une seule chose, ici, tu en fais 2, tu ajoutes une colonne puis tu en supprimes une autre.
Pour récupérer le résultat et donc le stocker dans une variable, tu peux lire ça.
Je sais que je ne réponds pas à la question, mais il est inutile de fusionner ces 2 colonnes, vu que tu peux obtenir la forme voulue avec un SELECT ...
DROP TABLE IF EXISTS people;
-- Création de la table
CREATE TABLE people(
id SERIAL PRIMARY KEY NOT NULL,
firstname VARCHAR(32) NOT NULL,
surname VARCHAR(32) NOT NULL
);
-- Peuplement de la table
INSERT INTO
people
VALUES
(1, 'Snow', 'The Hero'),
(2, 'Lightning', 'The Soldier'),
(3, 'Sazh', 'The Gunfighter'),
(4, 'Vanille', 'The Medic');
-- Ajout d'une colonne finalname
ALTER TABLE people
ADD COLUMN finalname VARCHAR(32);
-- Peuplement par defaut de la colonne finalname
ALTER TABLE people
ALTER COLUMN finalname SET DEFAULT '';
-- Fusion de la colonne firstname avec surname
UPDATE people
SET finalname = firstname || ' ' || surname;
-- Supprimer les colonnes firstname et surname
ALTER TABLE people
DROP COLUMN firstname,
DROP COLUMN surname;
SELECT * FROM people;
Ce qui est un peu perturbant c'est qu'au final en SQL le "FOREACH ROW in TABLE" est plus ou moins implicite puisqu'il se fait par défaut ici :
-- Fusion de la colonne firstname avec surname
UPDATE people
-- Pour chaque ligne de la table people, attribuer à finalname la concaténation de firstname + surname
SET finalname = firstname || ' ' || surname;
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Développeur Web autodidacte HTML5/CSS3/JS + C# (ASP.NET Core) / Python (Django)
Développeur Web autodidacte HTML5/CSS3/JS + C# (ASP.NET Core) / Python (Django)