这是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
数据进行比较,那么在从具有BUYER_ID的特定USER_ID的Table1数据进行比较后,Table2数据中缺少最后三行。
USER_ID | PRODUCT_ID | TIMESTAMPS
------------+------------------+-------------
1015826235 220003038067 1004841621
1015826235 300003861266 1005268799
1015826235 140002997245 1061569397
1015826235 200002448035 1005542471
所以我需要在使用Table2 JOINING Table1后显示上述示例中的两个结果中的任何一个 -
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
任何建议都将受到赞赏。
答案 0 :(得分: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的行以及所有不具有匹配产品和行的用户(LEFT JOIN位)带回来。然后只显示那些不符合要求的内容t表2中有匹配(IS NULL位)。“
联接在这里整齐地解释:
答案 1 :(得分: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
以获取匹配的记录(第二个示例)。
(您也可以使用WHERE PRODUCT_ID = NULL
作为@dash建议,但它没有表达完全相同的意图。)