4
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が上記のクエリ出力にありません。

そしてこれは2番目の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の間の出力は次のようになります。JOINTable2

*1015826235*     *260003553381*         *2002-01-30 23:12:18*

したがって、私がJOIN書いた上記のクエリとデータの間で実行Table2し、上記のクエリデータからの出力にないすべてのデータを取得する必要があります。なにか提案を?

追加するだけで、myCol1同じITEM_IDものでUSER_IDあり、BUYER_ID同じものです。

PS- Table2とJOINを作成するには、上記のクエリを使用する必要があります。

4

2 に答える 2

3

@ latr0dectusが指摘したように、あなたはを探していEXCEPTます。あなたの例では、を使用してこれを達成できますNOT IN。次のクエリで得られます。

上記の表にない表2のすべてのデータ

SELECT *
FROM Table2
WHERE ITEM_ID NOT IN
(
    SELECT ITEM_ID
    FROM AboveTable
)

更新:まあ、JOINとにかく2つのテーブルが必要な場合は、を使用してこれを行うことができますLEFT JOINWHERE t1.myCol1 IS NULL上記の表にないTable2からすべてのデータのみを取得するには、追加する必要があることに注意してください。

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単なる死すべき者のためのSQLクエリからの画像

于 2012-07-07T07:24:49.110 に答える
1

SQL Serverを使用している場合は、を使用できますEXCEPT。Oracleの場合は、を使用できますMINUS。基本的に、クエリ1とクエリ2の違いが返されます。

あなたの場合、2番目のクエリを実行し、次にEXCEPT、最初のクエリを実行します。

于 2012-07-07T06:17:30.553 に答える