2012-07-08 11 views
1

Il s'agit de données Table1.Joindre deux tableaux similaires

BUYER_ID  | ITEM_ID   |  CREATED_TIME 
-------------+--------------------+------------------------ 
1015826235  220003038067   2001-11-03 19:40:21 
1015826235  300003861266   2001-11-08 18:19:59 
1015826235  140002997245   2003-08-22 09:23:17 
1015826235  200002448035   2001-11-11 22:21:11 
1015826235  *260003553381*   *2005-05-27 07:09:56* 
1015826235  *260003553382*   *2002-02-02 19:40:39* 
2012926235  *260003553383*   *2002-06-01 06:58:47* 

Si vous comparez les Table1 données avec les données ci-dessous Table2, les trois dernières lignes sont manquantes dans les données Table2 après comparaison des données pour USER_ID Table1 particulier BUYER_ID.

USER_ID  | PRODUCT_ID | TIMESTAMPS 
------------+------------------+------------- 
1015826235  220003038067  1004841621 
1015826235  300003861266  1005268799 
1015826235  140002997245  1061569397 
1015826235  200002448035  1005542471 

donc je dois montrer une ou l'autre des deux résultat comme celui-ci pour l'exemple ci-dessus après JONCTION Tableau 1 avec Table2-

BUYER_ID |  ITEM_ID  | CREATED_TIME   |  USER_ID  |  PRODUCT_ID  | TIMESTAMPS 
-----------+-------------------+-------------------------+-----------------+----------------------+------------------ 
1015826235  260003553381  2005-05-27 07:09:56  1015826235   NULL    NULL 
1015826235  260003553382  2002-02-02 19:40:39  1015826235   NULL    NULL 
2012926235  260003553383  2002-06-01 06:58:47  2012926235   NULL    NULL 

OU

BUYER_ID |  ITEM_ID  | CREATED_TIME   | PRODUCT_ID | TIMESTAMPS 
-----------+-------------------+-------------------------+----------------+-------------- 
1015826235  260003553381  2005-05-27 07:09:56   NULL    NULL 
1015826235  260003553382  2002-02-02 19:40:39   NULL    NULL 
2012926235  260003553383  2002-06-01 06:58:47   NULL    NULL 

Toute suggestion sera apprécié.

Répondre

2

Je crois que ce que vous recherchez est l'opérateur LEFT JOIN;

SELECT * 
FROM Table1 
LEFT JOIN Table2 ON Table1.ITEM_ID = TABLE2.PRODUCT_ID AND Table1.BUYER_ID = Table2.USER_ID 
WHERE Table2.PRODUCT_ID IS NULL 

Ce que nous effectivement dire est « Ramène-moi toutes les lignes du tableau 2 qui ont un produit correspondant et l'identifiant de l'utilisateur, et tous ceux qui ne le font pas (GAUCHE REJOIGNEZ-bit). Alors seulement me montrer les les choses qui n'ont pas de correspondance dans le tableau 2 (le bit IS NULL). "

Joins sont expliqués d'une manière ordonnée ici:

Jeff Atwood's Visual Guide to SQL Joins

+0

Merci tableau de bord, oui cela a fonctionné. J'ai posté une autre question sur SO, dans laquelle personne n'a encore répondu. [http://stackoverflow.com/questions/11386368/sql-query-join-with-table](http://stackoverflow.com/questions/11386368/sql-query-join-with-table). Pouvez-vous s'il vous plaît jeter un oeil à cela aussi. Ce sera d'une grande aide pour moi. – ferhan

1

Vous avez juste besoin d'utiliser un LEFT JOIN, qui comprendra les lignes de la table source, même s'il n'y a pas de correspondance dans la table jointe, la sélection NULL pour les champs cela viendrait de cela.

SELECT Table1.BUYER_ID 
    , Table1.ITEM_ID 
    , Table1.CREATED_TIME 
    , Table2.USER_ID 
    , Table2.PRODUCT_ID 
    , Table2.TIMESTAMPS 
    FROM Table1 
     LEFT JOIN Table2 ON Table1.BUYER_ID = Table2.USER_ID 

Vous pouvez filtrer ci-dessus aux lignes qui manquent dans Tableau2 (pour obtenir votre exemple) en ajoutant

WHERE BUYER_ID NOT IN (SELECT USER_ID FROM Table2) 

Ou, retirez le NOT pour obtenir les dossiers où il y a un match (votre deuxième Exemple).

(Vous pouvez également utiliser la WHERE PRODUCT_ID = NULL comme @dash suggéré, mais il ne se prononce pas tout à fait la même intention.)

+0

Je suis d'accord, mais pour des raisons d'efficacité, je préférerais éviter une sous-requête corrélée. J'aime la façon dont la vérification NULL est plus une opération d'ensemble qu'une opération de données cependant :-) – dash

+0

Mais le seul problème avec ceci est, pour Table2.USER_ID je reçois toujours NULL. – ferhan

+0

Merci harpo, oui cela a fonctionné comme un charme mais le seul problème que j'ai posté ci-dessus. Merci pour la solution. J'ai posté une autre question sur SO, dans laquelle personne n'a encore répondu. [http://stackoverflow.com/questions/11386368/sql-query-join-with-table](http://stackoverflow.com/questions/11386368/sql-query-join-with-table). Pouvez-vous s'il vous plaît jeter un oeil à cela aussi. Ce sera d'une grande aide pour moi. – ferhan