如果這是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
我需要比較TestingTable2
與TestingTable1
對BUYER_ID
和USER_ID
。我需要看到,如果BUYER_ID
和USER_ID
得到匹配的話,我需要與PRODUCT_ID
和CREATED_TIME
與LAST_TIME
比較ITEM_ID
,如果有與TestingTable1
在他們或他們兩人中的任何一個進行比較後TestingTable2
不匹配的話,我需要證明結果。
所以,如果你看一下上面的示例 - 我有三個方案基本
- Firstly-在
TestingTable1
,在第一行ITEM_ID
不是TestingTable2
第一行與PRODUCT_ID
匹配,但CREATED_TIME
與匹配LAST_TIME
兩者的表中的第一行 - Secondly-在
TestingTable1
,在第二行中CREATED_TIME
沒有的TestingTable2
第二行中與LAST_TIME
匹配但ITEM_ID
與匹配對於第二行中兩個表 - Thirdly-在
TestingTable1
,在第三行中ITEM_ID
不與PRODUCT_ID
匹配並且還CREATED_TIME
不與LAST_TIME
匹配,所以第三行中兩者不與TestingTable1
第三匹配行。
所以這三種情況我需要覆蓋,而總是比較TestingTable2
和TestingTable1
。 TestingTable1
是主表,通過它,總是需要進行比較,所以它意味着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
所以我寫了一個查詢,我認爲這將涵蓋我所有的三種情形,但只有它涵蓋了First Two
不是Third One
。我很疑惑我們是否可以實現第三種情況?
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
任何建議,將不勝感激。
更新: -
只是一個快速更新我最初想的事。我意識到我的第三種情況存在一些問題。
首先在TestingTable1
,我排序(ORDER BY)由BUYER_ID
和CREATED_TIME
和同樣與TestingTable2
我與USER_ID
和LAST_TIME
排序表,我通過確保數據做比較,屬於BUYER_ID
和USER_ID
上給定的一天。
感謝Mikael提供的詳細解決方案。我發佈了另一個類似的問題,在這個問題中,我需要使用我寫的查詢來實現我的第三個場景,因爲我的查詢正在爲所有這兩種場景工作,我只需要爲第三種場景修改它。還有第三個場景問題,我之前沒有問過。 [http://stackoverflow.com/questions/11464273/multi-join-in-a-single-sql-query](http://stackoverflow.com/questions/11464273/multi-join-in-a-single- SQL查詢)。任何幫助將不勝感激。 – ferhan 2012-07-13 05:49:01