如何获取表1中存在但不是表2中的记录?
问题描述:
我有两个表:排除和kaggleresults。我试图寻找存在于excluded
记录,但在kaggleresults
如何获取表1中存在但不是表2中的记录?
计数不存在:
scala> spark.sql("select * from excluded").count()
res136: Long = 4652
scala> spark.sql("select * from kaggleresults").count()
res137: Long = 4635
不同的是17
scala> res136-res137
res139: Long = 17
我试图让那些17条记录。我在下面写了查询,但它返回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点的记录?
答
对于实际的记录(未计数),你可以使用
SELECT * FROM excluded
WHERE subject_id NOT IN (SELECT subject_id FROM kaggleresults)
但是,你不应该感到惊讶。如果产生的行数不匹配的差异两个表格的个别行数。
例如:假设table1的id是1,2,3,4和5,table2的id是3,4,5和6. table1和table2的行数分别是5和4,为1的差异,但实际上有两个记录在表1中有ID不存在于表2中的记录。
答
使用不关键字 您可以使用下面的查询
Select * from excluded where subject_id not in (select subject_id from kaggleresults)
答
使用带有子查询沿Not In
语法。
SELECT ID, Name
FROM Table1
WHERE ID NOT IN (SELECT ID FROM Table2)
答
是不是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|
+-----+
请你能告诉我这些表之间的共同ID –
安东尼排除查询看起来是正确的。你可以通过像你所做的那样通过左连接,EXISTS或NOT IN来完成,但是所有的结果都应该产生相同的结果,你可能会得到38,因为38条记录不存在。你说的是17,但是可能发生的另一个变化是在kaggresults中的记录不是排除在外的,你可能有21条记录,这就意味着净差值为17 – Matt
@Anthony请检查下面的查询我认为它将为你工作 –