重複の可能性:
テーブルを使用したSQLクエリJOIN
これがTestingTable1のデータである場合
BUYER_ID | ITEM_ID | CREATED_TIME
----------+-----------------+----------------------
1345653 151851771618 2012-07-09 19:57:33
1345653 110909316904 2012-07-09 21:29:06
1345653 221065796761 2012-07-09 19:31:48
そして、これがTestingTable2の以下のデータである場合
USER_ID | PRODUCT_ID | LAST_TIME
---------+----------------+-----------------------
1345653 150851771618 2012-07-09 19:57:33
1345653 110909316904 2012-07-09 22:29:06
1345653 221165796761 2012-07-09 12:31:48
onとと比較する必要がTestingTable2あります。を確認する必要があります。一致する場合は、と比較する必要があります。一方または両方で比較した後に不一致がある場合は、結果を表示する必要があります。TestingTable1BUYER_IDUSER_IDBUYER_IDUSER_IDITEM_IDPRODUCT_IDCREATED_TIMELAST_TIMETestingTable2TestingTable1
したがって、上記の例を見ると、基本的に3つのシナリオがあります
- Firstly- In
TestingTable1、の最初の行ITEM_IDはの最初の行と一致していませんPRODUCT_IDがTestingTable2、両方のテーブルの最初の行CREATED_TIMEと一致していますLAST_TIME - Secondly- In
TestingTable1、2番目の行はの2番目の行とCREATED_TIME一致していませんが、両方のテーブルの2番目の行と一致していますLAST_TIMETestingTable2ITEM_IDPRODUCT_ID TestingTable13番目に-では、3番目の行ITEM_IDはと一致しておらず、またも一致していPRODUCT_IDないCREATED_TIMEためLAST_TIME、3番目の行では両方が3番目の行と一致していませんTestingTable1。
したがって、これらは、常に比較TestingTable2しながらカバーする必要がある3つのケースです。TestingTable1またTestingTable1、これは常に比較を行う必要があるMAINテーブルであるため、データTestingTable1が常に正確であることを意味します。
したがって、上記の例を考慮して、これらのいずれかまたは両方のデータと一致しない場合は、同じデータTestingTable1の隣にこのような結果を表示する必要があります。これにより、TestingTable2TestingTable1TestingTable2
BUYER_ID | ITEM_ID | CREATED_TIME | USER_ID | PRODUCT_ID | LAST_TIME
-----------+-----------------+---------------------------+----------------+--------------------+-----------------------
1345653 151851771618 2012-07-09 19:57:33 1345653 150851771618 2012-07-09 19:57:33
1345653 110909316904 2012-07-09 21:29:06 1345653 110909316904 2012-07-09 22:29:06
1345653 221065796761 2012-07-09 19:31:48 1345653 221165796761 2012-07-09 12:31:48
だから私はクエリを書きました、それは私の3つのシナリオすべてをカバーすると思いましたが、それだけがカバーしてFirst TwoいませんでしたThird One。そして、私はこの3番目のシナリオを達成できるかどうか混乱していますか?
SELECT *
FROM(
SELECT *
FROM TestingTable1 A
JOIN TestingTable2 B ON A.BUYER_ID = B.USER_ID AND B.LAST_TIME = A.Created_TIME
WHERE B.PRODUCTID <> A.ITEM_ID
UNION ALL
SELECT *
FROM TestingTable1 A
INNER JOIN TestingTable2 B ON A.BUYER_ID = B.USER_ID AND B.PRODUCTID = A.ITEM_ID
WHERE B.t1time <> A.Created_TIME
) X
任意の提案をいただければ幸いです。
アップデート:-
私が最初にやろうと思っていたことを簡単に更新します。私は私の3番目のシナリオでいくつかの問題を知っていたので。
まず最初にTestingTable1、私はテーブルを並べ替え(ORDER BY)しBUYER_ID、CREATED_TIME同じようTestingTable2に並べ替えています。また、データが特定の日に属していることを確認しUSER_IDてLAST_TIME比較を行っています。BUYER_IDUSER_ID