SELECT test2.user_id,myTable1.myCol1 FROM testingtable2 test2 LATERAL VIEW
explode(test2.purchased_item.product_id) myTable1 AS myCol1;
我使用上述查询获得以下输出结果。
USER_ID | myCol1
-------------+---------------
1015826235 220003038067
1015826235 300003861266
1015826235 140002997245
1015826235 200002448035
如果您将查询的上述输出与以下Table2
数据进行比较,则上述查询输出中缺少Table2
数据的最后一行。
这是第二个Table2。
BUYER_ID | ITEM_ID | CREATED_TIME
-------------+--------------------+--------------------------
1015826235 220003038067 2012-06-21 07:57:39
1015826235 300003861266 2012-06-21 21:11:12
1015826235 140002997245 2012-06-14 20:10:16
1015826235 200002448035 2012-06-08 22:02:17
*1015826235* *260003553381* *2002-01-30 23:12:18*
我需要基本上使用JOIN
打印最后一行,所以在我上面写的查询和JOIN
数据之间的Table2
之后输出应该是这样的。
*1015826235* *260003553381* *2002-01-30 23:12:18*
所以我需要在我写的上述查询和JOIN
数据之间执行Table2
,并获取上述查询数据输出中不存在的所有数据。有什么建议吗?
只是添加myCol1
和ITEM_ID
是一回事,USER_ID
和BUYER_ID
是相同的。
P.S-我需要使用我的上述查询与Table2进行JOIN。
答案 0 :(得分:3)
正如@ latr0dectus指出的那样,您正在寻找EXCEPT
。在您的示例中,您可以使用NOT IN
来实现此目的。以下查询将为您提供:
Table2中不在上表中的所有数据
SELECT *
FROM Table2
WHERE ITEM_ID NOT IN
(
SELECT ITEM_ID
FROM AboveTable
)
更新:好吧,如果您想以任意方式JOIN
这两个表,那么您可以使用LEFT JOIN
执行此操作。请注意,您必须添加WHERE t1.myCol1 IS NULL
才能获得表2中不在上表中的所有数据:
SELECT *
FROM Table2 t2
LEFT JOIN AboveTable t1 ON t2.ITEM_ID = t1.myCol1
WHERE t1.myCol1 IS NULL
Update2: SQL标准指定TableReference1 JOIN TableReference2 ON ...
,如下图 1 所述:
表引用可以是像Table2
这样的表名,就像我上面的查询一样,或者是一个连接表,或者是一个SELECT语句,它只选择你在列中发布的一些特定列。
答案 1 :(得分:1)
如果您使用的是SQL Server,则可以使用EXCEPT
。如果是Oracle,您可以使用MINUS
。它基本上会返回查询1和查询2之间的不同。
在您的情况下,执行第二个查询,然后是EXCEPT
,然后是第一个查询。