select user_id, prod_and_ts.product_id as product_id, prod_and_ts.timestamps as
timestamps from testingtable2 LATERAL VIEW explode(purchased_item) exploded_table
as prod_and_ts;
通过使用上述查询,我得到了下面的输出。SQL查询连接表
USER_ID | PRODUCT_ID | TIMESTAMPS
------------+------------------+-------------
1015826235 220003038067 1004841621
1015826235 300003861266 1005268799
1015826235 140002997245 1061569397
1015826235 *200002448035* 1005542471
如果你比较上述output from the query with the below Table2 data
,然后在last line of above output
的product_id
不与ITEM_ID
最后一行在下面Table2
数据进行匹配。
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 *210002448035* 2001-11-11 22:21:11
所以我的问题是
找到所有这些PRODUCT_ID(ITEM_ID)
和TIMESTAMPS(CREATED_TIME)
不与对应于特定BUYER_ID或USER_ID Table2
数据匹配。
所以我需要证明这样的结果对于上述示例 -
BUYER_ID | ITEM_ID | CREATED_TIME | USER_ID | PRODUCT_ID | TIMESTAMPS
-----------+-------------------+-------------------------+---------------+------------------+------------------
1015826235 *210002448035* 2001-11-11 22:21:11 1015826235 *200002448035* 1005542471
我需要加入我与表2中写道,以获得上述结果上面的查询。所以我需要在JOINING过程中使用我的上述查询。这让我很困惑。任何建议将不胜感激。
更新: -
我写了下面的查询,但不知何故,我无法做到这一点,我想实现输出。谁能帮我这个?
SELECT table2.buyer_id, table2.item_id, table2.created_time from
(select user_id, prod_and_ts.product_id as product_id, prod_and_ts.timestamps as
timestamps from testingtable2 LATERAL VIEW explode(purchased_item) exploded_table
as prod_and_ts) prod_and_ts JOIN table2 where
prod_and_ts.user_id = table2.buyer_id
and (product_id <> table2.item_id or
timestamps <> UNIX_TIMESTAMP(table2.created_time));
我正在使用Hive,Hive支持SQL语法,所以这就是我将这个问题标记为'sql'和'join'的原因。所以JOIN将在HIVE中工作。我只需要加入基本。所以我认为Oracle语法会很好。 – ferhan 2012-07-08 20:37:08
为什么最后一行不匹配?是否因为时间戳与创建的时间不匹配? – dash 2012-07-08 23:03:57
我不确定我写的实际查询是否正确。这让我很困惑。所以不确定上面的查询是否正确。 – ferhan 2012-07-08 23:06:37