Partage
  • Partager sur Facebook
  • Partager sur Twitter

Joindre 2 tables avec des colonnes différente mais même id

SQL SERVER

    20 mai 2011 à 13:18:08

    Bonjour voilà j'ai 2 table :

    TABLE_A
    id qty_x
    70 10
    71 10
    72 10
    73 10


    TABLE_B
    id qty_y
    70 20
    71 20
    74 20
    75 20


    et je voudrais les fusionner ensemble

    id qty_x qty_y
    70 10 20
    71 10 20
    72 10 null
    73 10 null
    74 null 20
    75 null 20


    Merci de me dire comment arriver à ce résultat, je suis avec SQL SERVER 2008
    • Partager sur Facebook
    • Partager sur Twitter
      20 mai 2011 à 13:43:21

      Tu ajoute une colonne à une de tes table. Puis tu fais un INSERT INTO ... ON DUPLICATE KEY UPDATE
      • Partager sur Facebook
      • Partager sur Twitter
        20 mai 2011 à 14:03:50

        Et dans une vue ? tu fais comment si je ne veut pas créer une deuxième table ?
        • Partager sur Facebook
        • Partager sur Twitter
          20 mai 2011 à 14:05:15

          Tu veux quoi exactement ??? Juste faire un SELECT ou réorganiser ta base ?? C'est toujours mieux de donner des détails hein, sinon moi je pars sur une interprétation fausse...
          • Partager sur Facebook
          • Partager sur Twitter
            20 mai 2011 à 14:47:40

            Avec un UNION et LEFT JOIN ça devrait le faire:
            SELECT DISTINCT a.id, qty_x, qty_y
            FROM table_a a
            LEFT JOIN table_b b ON a.id = b.id
            UNION
            SELECT b.id, qty_x, qty_y
            FROM table_b b
            LEFT JOIN table_a a ON b.id = a.id
            
            • Partager sur Facebook
            • Partager sur Twitter
              20 mai 2011 à 19:42:24

              C'est original de simuler ça avec un UNION... l'habitude de mysql ?

              Y'a le LEFT JOIN, y'a le RIGHT JOIN, mais y'a aussi le FULL JOIN...

              SELECT * FROM t1 FULL OUTER JOIN t2 USING (id)
              


              La flemme de créer des tables jetables pour l'exemple donc (postgres) :

              WITH 
              ta AS (VALUES (70,        10),(71,        10),(72,        10),(73,        10)),
              tb AS (VALUES (70,        20),(71,        20),(74,        20),(75,        20))
              SELECT * FROM ta FULL JOIN tb USING (column1);
              
               column1 | column2 | column2 
              ---------+---------+---------
                    70 |      10 |      20
                    71 |      10 |      20
                    72 |      10 |  (NULL)
                    73 |      10 |  (NULL)
                    74 |  (NULL) |      20
                    75 |  (NULL) |      20
              • Partager sur Facebook
              • Partager sur Twitter
                25 mai 2011 à 11:18:36

                Je vient de tester la méthode de Lord Casque Noir mais celà ne fonctionne pas j'ai une erreur :

                Major Error 0x80040E14, Minor Error 25501 > SELECT * FROM table_a FULL OUTER JOIN table_b USING(noArticle) There was an error parsing the query. [ Token line number = 2,Token line offset = 1,Token in error = FULL ]">

                J'utilise SQLSERVER

                Par contre cette méthode bien que moins "jolie" marche
                :
                SELECT DISTINCT a.noArticle , qty_x, qty_y
                FROM table_a a
                LEFT JOIN table_b b ON a.noArticle = b.noArticle 
                UNION
                SELECT b.noArticle  , qty_x, qty_y
                FROM table_b b
                LEFT JOIN table_a a ON b.noArticle  = a.noArticle
                

                • Partager sur Facebook
                • Partager sur Twitter
                  25 mai 2011 à 13:01:58

                  Merci j'avais vu ce site, mais je pige que dalle je reçois à chaque fois une erreur cheloue

                  Major Error 0x80040E14, Minor Error 25501
                  > SELECT noArticle,qty_x,qty_y
                  FROM table_a a
                  FULL OUTER JOIN table_b b
                  ON a.noArticle = b.noArticle
                  WHERE a.noArticle IS NULL
                  OR b.noArticle IS NULL
                  There was an error parsing the query. [ Token line number = 3,Token line offset = 1,Token in error = FULL ]

                  On dirait qu'il n'aime pas le FULL
                  • Partager sur Facebook
                  • Partager sur Twitter
                    25 mai 2011 à 17:40:33

                    Heu...
                    SELECT a.id,a.qtx,b.qty 
                    FROM a TABLEA join b TABLEB ON a.id = b.id
                    


                    C'est ça que tu cherche ou j'ai encore mal compris ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      25 mai 2011 à 19:08:50

                      Citation : mbagiella

                      On dirait qu'il n'aime pas le FULL



                      Effectivement c'est chelou. Faudrait demander à quelqu'un qui connaît bien SQL Server...
                      • Partager sur Facebook
                      • Partager sur Twitter
                        25 mai 2011 à 19:15:40

                        SELECT a.id , qty_x , qty_y
                        FROM TABLE_A a
                        INNER JOIN TABLE_B b ON b.id = a.id
                        


                        dans un premier temps j'essayerais ça (mais je ne connais pas les spécificités de SQL SERVER)

                        EDIT : faut que j'apprenne à lire toute la demande ... donc ma solution est inccorect ... excusez moi pour le "flood"
                        • Partager sur Facebook
                        • Partager sur Twitter
                          26 mai 2011 à 11:23:52

                          SELECT a.id, qty_x, qty_y
                          FROM table_a a
                          FULL OUTER JOIN table_b b ON a.id = b.id
                          

                          Testé sous SQL Server 2008 sans problème.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            26 mai 2011 à 23:38:39

                            pas tout a fait

                            705029 10 20
                            705828 10 NULL
                            705822 10 NULL
                            NULL NULL 20
                            NULL NULL 20
                            • Partager sur Facebook
                            • Partager sur Twitter
                              27 mai 2011 à 0:23:16

                              SELECT coalesce(a.id, b.id) id, qty_x, qty_y
                              FROM  table_a a
                                    FULL JOIN table_b b 
                                      ON a.id = b.id


                              Tracker.
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Joindre 2 tables avec des colonnes différente mais même id

                              × 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.
                              • Editeur
                              • Markdown