IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Aide concaténation dans requête


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut Aide concaténation dans requête
    Bonjour à tous,

    Je sollicite votre aide pour une requête sql.

    J'ai une table avec la liste des villes belges d'abord en langue française puis cette même liste est en néerlandais dans la même table. Mon but est de concaténer le nom français de la ville avec le nom néerlandais de la ville dans un nouveau champ par exemple cityfrnl qui aura cette forme.

    concaténation la ville en français avec la même ville en néerlandais

    ex : ANVERS / ANTWERPEN

    la structure de ma table est comme ci-dessous

    language : 'FR'
    city : 'anvers'
    id : 1 à 2777

    deuxième partie de la table :

    language : 'NL'
    city : 'antwerpen'
    id : 1 à 2777

    les villes identiques ont le même id mais deux langues différentes

    Merci pour votre aide

  2. #2
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Bonjour,

    Tu dois faire une jointure entre tes deux tables puis concaténer tes colonnes.
    Qu'est ce que tu n'arrives pas à faire ?

    Il faudrait aussi préciser ton sgbd.
    ~ Lola ~

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    créer une nouvelle colonne et dupliquer des données existante dedans ?
    C'est une très mauvaise idée :
    - surcharge lors des insert / update
    - possibilité d'avoir des données corrompu à cause d'un oubli lors d'un update
    - place disque augmenté


    Et j'en oubli surement d'autre.

    Sinon pour votre question initiale regardez la doc de votre SGBD et cherchez "concat"

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut
    Bonjour,
    J'utilise Postgresql.
    Ce n'est pas deux tables c'est une seule table voilà pourquoi je n'arrive pas à faire ma requête
    je créée une nouvelle colonne pour ensuite ne garder que celle là et supprimer les autres y aurait aucun problème de surcharge etc...

  5. #5
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Tu devrais séparer tes deux tables en "sous-tables" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT *
    FROM 
    (SELECT id id_fr, city city_fr FROM MaTable WHERE language = 'FR') tmp_fr
    JOIN 
    (SELECT id id_nl, city city_nl FROM MaTable WHERE language = 'NL') tmp_nl
    ON tmp_fr.id_fr = tmp_nl.id_nl
    Au lieu de modifier ta base de données tu pourrais faire une vue, ce qui te permettrais d'avoir le formatage souhaité sans modifier la base.
    ~ Lola ~

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut
    Ce n'est pas ma table définitive ni de production, je suis à l'étape de traitement d'un fichier qui a été importé tel quel dans la table. Je suis en train de formater les données pour ma table définitive.
    Merci

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    lola06 => question ouverte: ce n'est pas plus performant d'utiliser des alias ?
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT *
    FROM MaTable as TableFR
    INNER JOIN Matable as TableNL ON TableFR.id = TableNL.id
    where TableFR.LANGUAGE = 'FR' and TableNL.LANGUAGE = 'NL'

    Tatayo.

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Gardez votre table telle quelle et créez cette vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      SELECT id
           , max(case LANGUAGE when 'FR' then city end) as nom_FR
           , max(case LANGUAGE when 'NL' then city end) as nom_NL
           , max(case LANGUAGE when 'FR' then city end) || ' / ' ||
             max(case LANGUAGE when 'NL' then city end) as nom_FR_NL
        FROM MaTable
       WHERE LANGUAGE in ('FR', 'NL')
    GROUP BY id;

  9. #9
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Pour ce qui est de la requête la plus optimisée je ne sais pas, mais nos trois requêtes renvoi le bon résultat.

    Sinon en passant, language est un mot réservé SQL, il serait mieux si tu ne l'utilisais pas en tant que nom de colonne.
    ~ Lola ~

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut
    Je ne voudrais pas garder ma table telle quelle car il y a des infos inutiles pour mon application.
    Je veux simplement ajouter un champ avec les villes concaténées ensuite je supprimerai beaucoup d'autres champs inutiles.

    Une vue n'est pas indispensable pour moi et dans mon cas de figure.

    merci beaucoup

  11. #11
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Que tu crées une table avec deux champs, un pour chaque langue, soit, mais ne concatène pas les deux dans un même champs.

    C'est stupide, et tu auras tout un tas de problèmes ensuite (notamment de performances) si tu souhaite ensuite récupérer la ville dans une langue uniquement.
    On ne jouit bien que de ce qu’on partage.

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut
    Tu as raison ! C'est stupide donc ma problématique change, il me faut deux colonnes une pour le nom en français et l'autre pour le nom en néerlandais en ayant qu'une seule table au départ

  13. #13
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Tu as trois requêtes qui correspondent à ton besoin.
    ~ Lola ~

  14. #14
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Que tu crées une table avec deux champs, un pour chaque langue, soit, mais ne concatène pas les deux dans un même champs.

    C'est stupide, et tu auras tout un tas de problèmes ensuite (notamment de performances) si tu souhaite ensuite récupérer la ville dans une langue uniquement.
    Et si une autre langue arrive dans le périmètre ?
    Les options avec vues sont nettement plus robustes de ce point de vue.

  15. #15
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Citation Envoyé par viny
    Tu as raison ! C'est stupide donc ma problématique change, il me faut deux colonnes une pour le nom en français et l'autre pour le nom en néerlandais en ayant qu'une seule table au départ
    Tu veux faire un update par jointure.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    UPDATE MaTable a
    SET cityNL = (SELECT city 
                    FROM MaTable b
                    WHERE b.language = 'NL'
                        AND a.id = b.id)
    WHERE language = 'FR'

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut
    Merci à tous pour les différents point de vue et solutions.

    C'est toujours un bonheur de venir sur ce forum on en ressort moins idiot !


  17. #17
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Rei Ichido Voir le message
    Et si une autre langue arrive dans le périmètre ?
    Les options avec vues sont nettement plus robustes de ce point de vue.
    Effectivement. Mais utiliser deux colonnes, c'est toujours mieux que deux tables ou un champ avec tout mélangé.
    On ne jouit bien que de ce qu’on partage.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] NZ sur champ concaténer dans requête
    Par AidezMoiSvp dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/11/2013, 08h52
  2. Problème de concaténation dans une requête
    Par Miss Ti dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 06/04/2007, 17h22
  3. [Conception] Concaténation dans une requête
    Par toddy_101 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/01/2007, 14h33
  4. [Visual Web] [SJSC] Concaténation dans requête SQL
    Par Original Prankster dans le forum NetBeans
    Réponses: 22
    Dernier message: 15/08/2005, 14h50
  5. Procédure stockée, concaténation dans requête
    Par sbeu dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/08/2005, 12h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo