2012-07-08 2 views
1

이것은 Table1 데이터입니다.두 개의 유사한 테이블 조인

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* 

당신은 BUYER_ID와 특정 USER_ID에 대한 표 데이터와 비교 한 후 다음 마지막 세 줄은 표 2 데이터에 누락, 아래 Table2 데이터로 Table1 데이터를 비교합니다.

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 

또는

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 

어떤 제안이 될 것입니다

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

그래서 나는 Table2-와 표 가입 한 후 위의 예를 들어이 같은 두 가지 결과 중 하나를 표시해야합니다 고맙습니다.

답변

2

나는 당신이 무엇을 믿는지는 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 

. 만 나에게 사람들을 보여 우리가 효과적으로 "다시 일치하는 제품 및 사용자 ID를 가지고 테이블 2의 모든 행을 나에게 가져다 말을하고, 그렇지 않은 모든 사람들이 (왼쪽 비트를 가입) 표 2 (IS NULL 비트)와 일치하지 않는 항목. "

Jeff Atwood's Visual Guide to SQL Joins

+0

감사 대시, 그래 그했다. 나는 아무에게도 아직 대답하지 않은 SO에 대해 하나 더 질문을 올렸습니다. [http://stackoverflow.com/questions/11386368/sql-query-join-with-table](http://stackoverflow.com/questions/11386368/sql-query-join-with-table). 너는 그것도 들여다 볼 수 있니? 나에게 큰 도움이 될 것이다. – ferhan

1

당신은 단지 필드에 NULL을 선택 조인 된 테이블에 일치하는,가없는 경우에도 소스 테이블에서 행을 포함하는하는 LEFT JOIN를 사용해야합니다 :

깔끔하게 여기에 설명 조인 그것은 그것으로부터 올 것입니다.

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 

당신은 (일치가 기록을 얻기 위해 두 번째를 NOT을 제거,

WHERE BUYER_ID NOT IN (SELECT USER_ID FROM Table2) 

을 추가하여 표 2 (귀하의 예를 얻을)에서 누락 행 위를 필터링 또는 수 예).

은 (@dash이 제안 당신은 또한 WHERE PRODUCT_ID = NULL를 사용할 수 있지만, 꽤 같은 의도를 표현하지 않습니다.)

+0

동의합니다. 그러나 효율성을 위해 상관 관계가있는 하위 쿼리는 피하는 것이 좋습니다. 나는 NULL 검사가 데이터 조작보다 더 많은 설정 연산 인 방식을 좋아한다 :-) – dash

+0

그러나 이것에 대한 유일한 문제는 Table2.USER_ID에 대해 항상 NULL을 얻는다는 것이다. – ferhan

+0

감사의 말 harpo, 네가 매력처럼 작동하지만 네가 위에 게시 한 유일한 문제. 솔루션을 가져 주셔서 감사합니다. 나는 아무에게도 아직 대답하지 않은 SO에 대해 하나 더 질문을 올렸습니다. [http://stackoverflow.com/questions/11386368/sql-query-join-with-table](http://stackoverflow.com/questions/11386368/sql-query-join-with-table). 너는 그것도 들여다 볼 수 있니? 나에게 큰 도움이 될 것이다. – ferhan

관련 문제