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 :

pb de syntaxe avec UNION


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Par défaut pb de syntaxe avec UNION
    Bonjour,

    J'ai une erreur sur la requête suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT t1.nom, t1.prenom, t1.email, t2.pseudo FROM tbladherent t1,
     tblconnexion t2 WHERE t1.id=t2.num_adherent)
     UNION (select nom FROM tblGROUP)
    Pouvez-vous m'aider?
    Je cherche à récupérer tous les résultats du champ 'nom'.

    Merci

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    L'UNION de deux requête sert à réunir en un seul résultat deux requêtes qui donnent les mêmes colonnes.

    J'ai plutôt l'impression que dans votre cas vous auriez besoin d'une bonne jointure.

    Au passage, faites les jointures de préférence avec la structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FROM a
    INNER JOIN b ON a.col1 = b.col2
    plutôt que par la structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FROM a, b 
    WHERE a.col1 = b.col2
    Ca permet de mieux séparer la jointure entre tables de la restriction sur les lignes à retourner, c'est plus lisible et plus facile à debugguer.

    Ceci étant dit, je n'ai pas vraiment compris votre besoin au vu de votre requête et du texte qui l'accompagne.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    Ce qu'on appelle plus communement jointure explicite et jointure implicite

    CinePhil a raison, une jointure semble etre la solution pour vous, mais sans explications du pourquoi de votre requete, je ne m'avancerai pas plus

    Bon courage

  4. #4
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Par défaut
    Bonjour,

    Merci pour vos réponses et je réponds à vos interrogations.

    tblGROUP contient le champ nom.
    tbladherent contient le champ nom, prenom,email
    tblconnexion contient le champ pseudo.

    Je cherche à alimenter un select multiple contenant suivant le choix de l'utilisateur via une combobox (select)

    Ce select multiple contiendra :
    - la liste des pseudos et des groupes si l'utilisateur choisit l'option pseudo
    - la liste des nom-prenom et des groupes si l'utilisateur choisit l'option nom
    - la liste des email et des groupes si l'utilisateur choisit l'option mail

    En fait, tblGROUP doit toujours me retourner tous ses résultats en combinaison avec certains champs de tbladherent ou de tblconnexion

    merci pour votre patience

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par bastien Voir le message
    tblGROUP contient le champ nom.
    tbladherent contient le champ nom, prenom,email
    tblconnexion contient le champ pseudo.
    Si les tables ne contiennent que ces colonnes là, il n'y a aucune possibilité de jointure entre les tables, ces trois tables sont indépendantes. Il est donc impossible d'extraire des informations communes entre ces trois tables.

    Un exemple :
    Admettons que la table 'tblconnexion' ne contienne que le pseudo CinePhil, comment je sais que CinePhil correspond à la l'adhérent Philippe Leménager dans la table 'tbladherent' ?

    La description que vous avez donnée de vos tables est-elle complète ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Par défaut
    Voici les tables telles qu'elles furent créées :
    CREATE TABLE IF NOT EXISTS `tbladherent` (
    `id` tinyint(4) unsigned NOT NULL auto_increment,
    `titre` varchar(10) collate latin1_general_ci NOT NULL default 'm',
    `nom` varchar(50) collate latin1_general_ci NOT NULL,
    `prenom` varchar(50) collate latin1_general_ci NOT NULL,
    `adresse` varchar(100) collate latin1_general_ci NOT NULL,
    `cp` int(7) unsigned NOT NULL,
    `ville` varchar(50) collate latin1_general_ci NOT NULL,
    `email` varchar(100) collate latin1_general_ci NOT NULL,
    `anniversaire` datetime NOT NULL COMMENT 'Date d''anniversaire',
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=32 ;

    CREATE TABLE IF NOT EXISTS `tblconnexion` (
    `id` tinyint(4) unsigned NOT NULL auto_increment,
    `num_adherent` tinyint(4) unsigned NOT NULL,
    `pseudo` varchar(50) collate latin1_general_ci NOT NULL,
    `mot_de_passe` varchar(100) collate latin1_general_ci NOT NULL,
    `date_inscription` datetime NOT NULL,
    `compte_active` varchar(5) collate latin1_general_ci NOT NULL,
    `active_key` varchar(100) collate latin1_general_ci NOT NULL,
    `grade` varchar(50) collate latin1_general_ci NOT NULL default 'visiteur',
    `nouveau` varchar(4) collate latin1_general_ci NOT NULL default 'oui',
    `enligne` enum('0','1') collate latin1_general_ci NOT NULL default '0',
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=29 ;

    CREATE TABLE IF NOT EXISTS `tblGROUP` (
    `id` int(11) NOT NULL auto_increment,
    `nom` varchar(255) NOT NULL default '',
    `message` text NOT NULL,
    KEY `id` (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    tbladherent et tblconnexion sont liées via id(tbladherent) et num_adherent(tblconnexion)

    Je souhaite avoir accès à tous les nom, prenom, email de tbladherent et pseudo correspondant de tblconnexion AVEC en plus tous les enregistrements du champ nom de tblGROUP

Discussions similaires

  1. classer par date les resultats de 2 tables avec UNION
    Par dgedge dans le forum Requêtes
    Réponses: 4
    Dernier message: 14/06/2005, 19h23
  2. Problème avec UNION et WHERE
    Par portu dans le forum Langage SQL
    Réponses: 13
    Dernier message: 20/04/2005, 11h29
  3. Réponses: 10
    Dernier message: 30/11/2004, 10h12
  4. [langage] Pb de syntaxe avec GOTO
    Par BEAUJAULT dans le forum Langage
    Réponses: 2
    Dernier message: 14/10/2004, 16h02
  5. Problème requête avec UNION et ORDER BY
    Par Yann21 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 12/12/2003, 11h02

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