2016-11-16 9 views
1

私は2つのテーブルを持っています:除外とkaggleresults。表1には存在するが表2には存在しないレコードを取得する方法は?

scala> spark.sql("select * from excluded").count() 
res136: Long = 4652 

scala> spark.sql("select * from kaggleresults").count() 
res137: Long = 4635 

違いは、私はそれらの17件のレコードを取得しようとしています17

scala> res136-res137 
res139: Long = 17 

です:私はexcludedに存在するがkaggleresults

カウントに存在しないレコードを検索しようとしています。私は以下の質問を書いたが、代わりに38を返す。

scala> spark.sql("select * from excluded left join kaggleresults on kaggleresults.subject_id = excluded.subject_id where kaggleresults.subject_id is null").count() 
res135: Long = 38 

質問

何クエリ私はそれらの17件のレコードを取得するために記述する必要がありますか?

+1

これらのテーブル間の共通IDを教えてください。 –

+0

アンソニーの除外クエリが正しく表示されます。あなたは、EXISTS、NOT INのように、左の結合を使って行うことができますが、38のレコードが存在しないため、すべての結果が38になる可能性があります。あなたは17と言っていますが、起こりうる1つのバリエーションは、除外されていないkagglersultsにあるレコードです。17のような21レコードがあります。 – Matt

+0

@Anthonyあなたのために働くでしょう –

答えて

1

、あなたは結果の行数は、の違いと一致しない場合しかし、あなたは驚いてはいけません

SELECT * FROM excluded 
WHERE subject_id NOT IN (SELECT subject_id FROM kaggleresults) 

を使用することができます2つのテーブルの個々の行数。

たとえば、table1のidが1,2,3,4,5の場合、table2のidが3,4,5,6の場合、table1とtable2の行数はそれぞれ5と4です。 1の差はありますが、実際にはテーブル1に2つのレコードがあり、テーブル2には存在しないIDがあります。

0

キーワード あなたはサブクエリと一緒にNot Inの構文を使用し

Select * from excluded where subject_id not in (select subject_id from kaggleresults) 
0

LEFT_ANTIに参加しませんか?

scala> val excluded = (0 to 5).toDS 
left: org.apache.spark.sql.Dataset[Int] = [value: int] 

scala> val kaggleresults = (3 to 10).toDS 
right: org.apache.spark.sql.Dataset[Int] = [value: int] 

scala> excluded.join(kaggleresults, Seq("value"), "leftanti").show 
+-----+ 
|value| 
+-----+ 
| 0| 
| 1| 
| 2| 
+-----+ 
関連する問題