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*

この Table1データを以下のデータと比較するとTable2、特定の USER_ID と BUYER_ID の Table1 データを比較した後、Table2 データの最後の 3 行が欠落しています。

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

したがって、上記の例では、Table1 を Table2 と結合した後、このような 2 つの結果のいずれかを表示する必要があります。

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

任意の提案をいただければ幸いです。

4

2 に答える 2

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

私たちが効果的に言っているのは、「テーブル 2 から、製品 ID とユーザー ID が一致するすべての行と、そうでないすべての行 (LEFT JOIN ビット) を返してください。表 2 に一致します (IS NULL ビット)。」

結合はここできちんと説明されています:

Jeff Atwood の SQL 結合のビジュアル ガイド

于 2012-07-08T21:55:48.010 に答える
1

を使用するだけLEFT JOINで、結合されたテーブルに一致するものがない場合でもソース テーブルからの行が含まれ、そこから来るフィールドには NULL が選択されます。

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

追加することにより、Table2 にない行に上記をフィルター処理できます (例を取得するため)。

 WHERE BUYER_ID NOT IN (SELECT USER_ID FROM Table2)

または、 を削除しNOTて、一致するレコードを取得します (2 番目の例)。

( WHERE PRODUCT_ID = NULL@dash が提案したように を使用することもできますが、まったく同じ意図を表すわけではありません。)

于 2012-07-08T21:57:59.120 に答える