如果这是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