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 :

UNION jointure etc... je patauge...


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 38
    Points : 33
    Points
    33
    Par défaut UNION jointure etc... je patauge...
    bonjour,
    je vais essayer d'etre clair mais c'est difficile pour moi etant novice en SQL ( je me documente et j'apprends )

    j'ai 3tables qui ont pour points communs un champ "nom"et un champ "IDagenda"

    une autre table appelé calendrier a un champ "IDagenda" ( j'avais donc penser a une jointure avec inner join calndrier using(idcalendrier) )

    ensuite j'ai une 4ieme table nommée config qui contient un champ "planconfid"
    voici ce que j'ai fait ( ce que j'ai essayer de faire qui ne donne bien entendu pas le resultat voulu )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     --tout ce qui suit n'est pas correct c'est simplement pour vous donner une idée
    SELECT DISTINCT
    ID,
     table1.nom AS usertype1,
     table2.nom AS usertype2,
     table3.nom AS usertype3, 
    FROM table1, table2, table3
    INNER JOIN calendrier 
    USING(IDagenda)
    UNION
    --ce qui suit est encore plus faux car choisir FROM calendrier,config
    --et joindre sur config n'a aucun sens je le sais mais c'est ce que je 
    --voudrais faire ( a peu pres)
    SELECT
    calendrier.IDagenda,
    calendrier.intitulé AS intitul,
    config.preferences AS pref
    FROM calendrier,config 
    INNER JOIN config
    ON calendrier.IDagenda=config. planconfid
    le but etant d'obtenir
    [edit]
    ID ---------usertype1 ou 2 ou 3 --- Dagenda --------- intitule - --pref
    1 ------------toto ------------------ ------- int ----------- text ----- text
    2------------ gg ------ etc..--------------------------------------------------
    [/edit]
    voila merci de vos idées/solutions/conseils et de ne pas rire en voyant
    ma requete ci dessus

    je reussi en fesant autrement
    ( plusieurs select mais j'aimerai savoir le faire avec une seule )
    a chaque fois dans le script actuel
    ca donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mavarpreference=SELECT preferences FROM config WHERE ID= mavarplanconfid
    ( recup de calendrierID avec une requete plus haut)
    note:
    mon sgbd est mysql
    L'être humain, en général, dans la vie, réacte. On réacte, c'est à dire qu'on fait ce qu'on est supposé faire. Travailler, manger... J'm'excuse de l'expression; chier, mais je trouve qu'un être humain doit créer. JC Vandamme

  2. #2
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut

    t'as essayé en faisant ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT ID,
     table1.nom AS usertype1,
     table2.nom AS usertype2,
     table3.nom AS usertype3,
     calendrier.intitulé AS intitul,
     config.preferences AS pref
    FROM calendrier INNER JOIN  ON table1.IDagenda=calendrier.IDagenda
                    INNER JOIN  ON table2.IDagenda=calendrier.IDagenda
                    INNER JOIN  ON table3.IDagenda=calendrier.IDagenda
                    INNER JOIN  ON calendrier.IDagenda=config.planconfid
    WHERE tes_conditions...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 38
    Points : 33
    Points
    33
    Par défaut
    je viens de tester et

    requête SQL :

    SELECT ID, table1.nom AS usertype1, table2.nom AS usertype2, table3.nom AS usertype3, calendrier.intitulé AS intitul, config.preferences AS pref
    FROM calendrier
    INNER JOIN ON table1.IDagenda = calendrier.IDagenda
    INNER JOIN ON table2.IDagenda = calendrier.IDagenda
    INNER JOIN ON table3.IDagenda = calendrier.IDagenda
    INNER JOIN ON calendrier.IDagenda = config.planconfid
    LIMIT 0 , 30

    MySQL a répondu:

    #1064 - Erreur de syntaxe près de 'ON table1.IDagenda = calendrier.IDagenda
    INNER JOIN ON table2.' à la ligne 3
    WHERE tes_conditions...
    aucune condition de tri de toute facon
    car je veut tout selectionner comme j'ai dit dans le post precedent ( oups l'indentation est nulle j'edite ( j'avais pas vu que l'indentation etait comme ca
    cormal que tu n'ai pas compris
    L'être humain, en général, dans la vie, réacte. On réacte, c'est à dire qu'on fait ce qu'on est supposé faire. Travailler, manger... J'm'excuse de l'expression; chier, mais je trouve qu'un être humain doit créer. JC Vandamme

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    La syntaxe du JOIN n'est pas bonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FROM calendrier INNER JOIN  table1 ON table1.IDagenda=calendrier.IDagenda 
                    INNER JOIN table2 ON table2.IDagenda=calendrier.IDagenda 
                    INNER JOIN table3 ON table3.IDagenda=calendrier.IDagenda 
                    INNER JOIN config ON calendrier.IDagenda=config.planconfid
    Mais je pense que tu devrais donner les schéma de tes bases et expliquer CLAIREMENT ce que tu veux, je vais essayer de deviner ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT c.ID, u.nom, c.intitule, g.preference
    FROM Calendrier c INNER JOIN Config g ON c.IDagenda = g.planconfid
                      INNER JOIN (SELECT IDAgenda, Nom FROM Table1
                                  UNION 
                                  SELECT IDAgenda, Nom FROM Table2
                                  UNION
                                  SELECT IDAgenda, Nom FROM Table3)u ON c.IDAgenda = u.IdAgenda
    S'il n'y a aucun risque de doublon remplace les UNION par des UNION ALL
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 38
    Points : 33
    Points
    33
    Par défaut
    bon voici mes tables,
    ces tables sont celles que j'utulise pour mes tests qui sont des
    copies des vraies avec moins de colonnes
    ( pour ne pas me compliquer la tache dans mes test, j'ai laisser uniquement les champs qui m'interessent )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    CREATE TABLE `calendrier` (
      `IDagenda` tinyint(4) NOT NULL auto_increment,
      `intitulé` text NOT NULL,
      `partagenb` tinyint(4) NOT NULL default '0',
       KEY `ID` (`IDagenda`)
      ) TYPE=MyISAM AUTO_INCREMENT=3 ;
    **********************contenu de table calendrier*****
    INSERT INTO `calendrier` (`IDagenda`, `intitulé`, `partagenb`) VALUES (1, 'agenda1', 2),
    (2, 'agenda2', 1);
     
    *************************table1************
    CREATE TABLE `table1` (
      `ID` tinyint(4) NOT NULL auto_increment,
      `nom` text NOT NULL,
      `IDagenda` tinyint(4) NOT NULL default '0',
       KEY `ID` (`ID`)
    ) TYPE=MyISAM AUTO_INCREMENT=5;
    ****************************contenu table 1,2,3*******
    INSERT INTO `table1` (`ID`, `nom`, `IDagenda`) VALUES (1, 'toto', 1),
    (2, 'toto2', 2),
    (3, 'paul', 2),
    (4, 'pierre', 2);
    ***************************table2,3**********
    CREATE TABLE table2 AS SELECT * FROM table1
    CREATE TABLE table3 AS SELECT * FROM table1-- ( pour le test)
     
    ***************************table config*****
    CREATE TABLE `config` (
      ` planconfid` tinyint(4) NOT NULL default '0',
      `preferences` text NOT NULL,
      `comment` text NOT NULL,
    ) TYPE=MyISAM;
    ****************************contenu de config**
    INSERT INTO `config` (` planconfid`, `preferences`, `comment`) VALUES (2, 'voici ce preferences', 'des infos');
    donc voici ce que je veut faire

    selectionner chaque personnes de la table1,2,3 ( sans doublons )
    ces personnes sont jointes avec IDagenda ( dans calendrier )
    selectionner IDagenda,intitulé de calendrier
    et selectionner "preferences" dans la table config
    qui a un champ appelé "planconfid"

    en bref je veut selectionner ce que j'ai "dessiner" deux post plus haut
    maintenant je pense avoir été assez clair ?
    ( si il y a un point qui n'est toujours pas clair, demandez moi )
    L'être humain, en général, dans la vie, réacte. On réacte, c'est à dire qu'on fait ce qu'on est supposé faire. Travailler, manger... J'm'excuse de l'expression; chier, mais je trouve qu'un être humain doit créer. JC Vandamme

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 38
    Points : 33
    Points
    33
    Par défaut
    mon probleme est surment tres simple donc "up"
    L'être humain, en général, dans la vie, réacte. On réacte, c'est à dire qu'on fait ce qu'on est supposé faire. Travailler, manger... J'm'excuse de l'expression; chier, mais je trouve qu'un être humain doit créer. JC Vandamme

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

Discussions similaires

  1. SQLAlchemy : les relations, jointures, etc
    Par gilloddon dans le forum Bibliothèques tierces
    Réponses: 3
    Dernier message: 06/12/2012, 20h59
  2. Réponses: 0
    Dernier message: 18/05/2009, 16h15
  3. union ou jointure ? avec where
    Par rouxfab dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 22/07/2008, 12h11
  4. Union ou jointure sur la meme table ?
    Par chris92 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 11/07/2007, 16h44
  5. Réponses: 3
    Dernier message: 18/12/2006, 09h14

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