重複の可能性:
テーブルを使用した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
あります。を確認する必要があります。一致する場合は、と比較する必要があります。一方または両方で比較した後に不一致がある場合は、結果を表示する必要があります。TestingTable1
BUYER_ID
USER_ID
BUYER_ID
USER_ID
ITEM_ID
PRODUCT_ID
CREATED_TIME
LAST_TIME
TestingTable2
TestingTable1
したがって、上記の例を見ると、基本的に3つのシナリオがあります
- Firstly- In
TestingTable1
、の最初の行ITEM_ID
はの最初の行と一致していませんPRODUCT_ID
がTestingTable2
、両方のテーブルの最初の行CREATED_TIME
と一致していますLAST_TIME
- Secondly- In
TestingTable1
、2番目の行はの2番目の行とCREATED_TIME
一致していませんが、両方のテーブルの2番目の行と一致していますLAST_TIME
TestingTable2
ITEM_ID
PRODUCT_ID
TestingTable1
3番目に-では、3番目の行ITEM_ID
はと一致しておらず、またも一致していPRODUCT_ID
ないCREATED_TIME
ためLAST_TIME
、3番目の行では両方が3番目の行と一致していませんTestingTable1
。
したがって、これらは、常に比較TestingTable2
しながらカバーする必要がある3つのケースです。TestingTable1
またTestingTable1
、これは常に比較を行う必要があるMAINテーブルであるため、データTestingTable1
が常に正確であることを意味します。
したがって、上記の例を考慮して、これらのいずれかまたは両方のデータと一致しない場合は、同じデータTestingTable1
の隣にこのような結果を表示する必要があります。これにより、TestingTable2
TestingTable1
TestingTable2
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_ID
USER_ID