标签: anti-join

如何查找未加入的记录?

我有两张桌子连在一起.

A有很多B.

通常你会这样做:

select * from a,b where b.a_id = a.id
Run Code Online (Sandbox Code Playgroud)

从b中记录的所有记录中获取记录.

如何获得b中没有任何内容的记录?

sql select join anti-join

51
推荐指数
5
解决办法
4万
查看次数

检查另一个表中是否存在项目

我的表格设置如下:

table name: process
fields: name, id_string

table name: value_seach
fields: id_string, value
Run Code Online (Sandbox Code Playgroud)

我想构造一个select语句,它将显示在value_search中没有条目的所有进程名称(使用它的各自的id_string).

进程表中的id_string可以为null,并且仍然具有名称,但如果可能,则需要排除这些名称.value_search中的id_string永远不能为null

我该怎么做呢?

sql oracle anti-join exists

27
推荐指数
3
解决办法
8万
查看次数

反加入熊猫

我有两个表,我想附加它们,以便只保留表A中的所有数据,并且只有在表B的数据唯一时才添加来自表B的数据(键值在表A和B中是唯一的,但在某些情况下是密钥将出现在表A和表B中.

我认为这样做的方法将涉及某种过滤连接(反连接)以获取表B中未在表A中出现的值然后附加两个表.

我熟悉R,这是我在R中用来做这个的代码.

library("dplyr")

## Filtering join to remove values already in "TableA" from "TableB"
FilteredTableB <- anti_join(TableB,TableA, by = "Key")

## Append "FilteredTableB" to "TableA"
CombinedTable <- bind_rows(TableA,FilteredTableB)
Run Code Online (Sandbox Code Playgroud)

我如何在python中实现这一目标?

python merge anti-join dataframe pandas

27
推荐指数
4
解决办法
1万
查看次数

没有适用于"anti_join"的方法应用于类"因子"的对象

我想识别dataframe1中存在的行,这些行基于特定列在dataframe2中不存在.我使用下面的代码来获取所需的信息.

diffId <- anti_join(dat$ID,datwe$ID)
Run Code Online (Sandbox Code Playgroud)

不幸的是,我遇到了一个错误:

UseMethod中的错误("anti_join"):
没有适用于"anti_join"的方法应用于类"factor"的对象

我检查了两个数据帧中所需列的类,结果证明是这样的factor.还试图将列分成单独的变量,假设它可以解决问题,但没有运气!

fac1 <- datwe$ID
fac2 <- dat$ID
diffId <- anti_join(fac2,fac1)
Run Code Online (Sandbox Code Playgroud)

你能分享一下你的想法吗?

谢谢

comparison r anti-join dataframe dplyr

8
推荐指数
1
解决办法
2万
查看次数

Spark 数据集何时使用 except 与 Left Anti Join

我想知道调用 except 之间是否存在性能差异(https://spark.apache.org/docs/2.1.0/api/java/org/apache/spark/sql/Dataset.html# except(org.apache. Spark.sql.Dataset)并使用左反连接。到目前为止,我看到的唯一区别是,使用左反连接,两个数据集可以具有不同的列。

anti-join apache-spark apache-spark-sql

8
推荐指数
1
解决办法
9893
查看次数

如何通过JOIN从另一个表中查找不存在的数据?

我有两个表TABLE1,它们看起来像:

id      name     address
1       mm     123
2       nn     143
Run Code Online (Sandbox Code Playgroud)

和TABLE2 w/c看起来像:

name     age
mm      6
oo      9
Run Code Online (Sandbox Code Playgroud)

我想通过比较来获得不存在的名称TABLE1TABLE2.

所以基本上,我必须得到第二行,w/c有一个不存在的NN名称,TABLE2输出应该如下所示:

id      name     address
2      nn      143
Run Code Online (Sandbox Code Playgroud)

我试过这个,但它不起作用:

SELECt  w.* FROM TABLE1 W INNER JOIN TABLE2 V
  ON W.NAME <> V.NAME
Run Code Online (Sandbox Code Playgroud)

它仍然获得现有记录.

mysql sql join anti-join

6
推荐指数
1
解决办法
9735
查看次数

为什么 left_anti join 在 pyspark 中不能按预期工作?

在数据框中,我试图识别那些在 C2 列中具有值的行,而该值在任何其他行的 C1 列中都不存在。我尝试了以下代码:

in_df = sqlContext.createDataFrame([[1,None,'A'],[2,1,'B'],[3,None,'C'],[4,11,'D']],['C1','C2','C3'])
in_df.show()
    +---+----+---+
    | C1|  C2| C3|
    +---+----+---+
    |  1|null|  A|
    |  2|   1|  B|
    |  3|null|  C|
    |  4|  11|  D|
    +---+----+---+
filtered = in_df.filter(in_df.C2.isNotNull())
filtered.show()
    +---+---+---+
    | C1| C2| C3|
    +---+---+---+
    |  2|  1|  B|
    |  4| 11|  D|
    +---+---+---+
Run Code Online (Sandbox Code Playgroud)

现在应用 left_anti 连接预计只会返回第 4 行,但我也得到第 2 行:

filtered.join(in_df,(in_df.C1 == filtered.C2), 'left_anti').show()
    +---+---+---+
    | C1| C2| C3|
    +---+---+---+
    |  2|  1|  B|
    |  4| 11|  D|
    +---+---+---+
Run Code Online (Sandbox Code Playgroud)

如果我“具体化”过滤后的 DF,结果将如预期:

filtered = filtered.toDF(*filtered.columns) …
Run Code Online (Sandbox Code Playgroud)

anti-join apache-spark-sql

6
推荐指数
1
解决办法
2万
查看次数

在连接中广播左表

这是我的加入:

df = df_small.join(df_big, 'id', 'leftanti')
Run Code Online (Sandbox Code Playgroud)

看来我只能广播正确的数据帧。但为了让我的逻辑发挥作用(左反连接),我必须将我的df_small放在左侧。

如何广播左侧的数据帧?


例子:

from pyspark.sql import SparkSession, functions as F
spark = SparkSession.builder.getOrCreate()

df_small = spark.range(2)
df_big = spark.range(1, 5000000)

#    df_small     df_big
#    +---+        +-------+
#    | id|        |     id|
#    +---+        +-------+
#    |  0|        |      1|
#    |  1|        |      2|
#    +---+        |    ...|
#                 |4999999|
#                 +-------+

df_small = F.broadcast(df_small)
df = df_small.join(df_big, 'id', 'leftanti')
df.show()
df.explain()

#    +---+
#    | id|
#    +---+
# …
Run Code Online (Sandbox Code Playgroud)

anti-join broadcast semi-join apache-spark pyspark

5
推荐指数
1
解决办法
4620
查看次数

Postgres ANTI-JOIN需要表扫描吗?

我需要在同一个表上的ANTI-JOIN(不存在来自表的SELECT东西... /左连接表WHERE table.id IS NULL).实际上我有一个索引来提供不存在的问题,但查询规划器选择使用位图堆扫描.

该表有1亿行,因此进行堆扫描时搞砸了......

如果Postgres可以与指标进行比较,那将会非常快.Postgres是否必须访问此ANTI-JOIN的表格?

我知道必须在某个时候访问该表以服务MVCC,但为什么这么早呢?不能只用桌子来固定,因为它可能会遗漏一些东西吗?

database postgresql indexing anti-join

4
推荐指数
1
解决办法
3239
查看次数

MySQL反连接

我有两个表:

课程:ID,名称

老师:IdUser,IdCourse,IdSchool

现在,例如,我有一个ID为10的用户和一个ID为4的学校。

我想对表Course中的所有Cousr进行选择,不要将它们的ID与IdUser 10和IdSchool 4一起记录在Table Teacher中。

我该如何查询?

mysql anti-join

3
推荐指数
1
解决办法
4664
查看次数

一个针对三个表的MySQL查询:A中有多少个不在B或C中?

我在制定MySQL查询以执行以下任务时遇到了问题,虽然我已经看到过这里讨论的类似查询,但它们与我的完全不同,我试图转换它们.问题是(相当)简单陈述.我有三张桌子,'成员','dog_shareoffered'和'dog_sharewanted'.会员可以为他们想要出售或想要购买的东西提供零个,一个或多个广告,并且细节存储在相应的提供或想要的表格中,以及放置广告的成员的ID.列'id'对于成员是唯一的,并且对于所有三个表都是通用的.我想要的查询是询问有多少成员没有在任何一个表中放置广告.

我试过几种方式来问这个问题.我能得到的最接近的是一个不崩溃的查询!(无论如何,我不是MySQL专家).以下是我从其他示例中收集到的内容,但它返回零行,我知道结果应该大于零.

SELECT id 
  FROM members 
 WHERE id IN (SELECT id 
                FROM dog_sharewanted 
               WHERE id IS NULL) 
   AND id IN (SELECT id 
                FROM dog_shareoffered 
               WHERE id IS NULL)
Run Code Online (Sandbox Code Playgroud)

这个查询看起来很容易理解,不像我所看到的'JOIN',但我猜我可能需要某种Join,但在这种情况下会怎样?

mysql sql anti-join

2
推荐指数
1
解决办法
135
查看次数

如何在 Pandas 中执行反联接或左外联接(基于多个键获取数据集中不在另一个数据集中的所有行)

我有两个数据集:

df1 = pd.DataFrame(data = {'label1': ['A', 'A', 'B', 'C'], 'label2': ['a', 'b', 'c', 'd'], 'value': [1,2,3,4]})

df2 = pd.DataFrame(data = {'label1': ['A', 'A', 'D', 'E'], 'label'2': ['a', 'd', 'c','e'], 'value2': [10,12,23,14]})
Run Code Online (Sandbox Code Playgroud)

我想执行反连接,以便生成的数据框包含 df1 的行,其中在 df2 中找不到键 [['label1', 'label2']] 。

结果 df 应该是:

label1     label2     value
A          b          2
B          c          3
C          d          4
Run Code Online (Sandbox Code Playgroud)

在使用 dplyr 的 R 中,代码将是:

df3 = anti_join(df1, df2, by = c("label1", "label2"))
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助。

anti-join pandas

1
推荐指数
1
解决办法
2852
查看次数

MySQL 用于根据 uuid 加入表并忽略两个表中都存在的 uuid

我试图找出如何最好地编写一个省略返回maintable用户 ( uuid_user) 已经看到 ( seentable) 的行 ( ) 的语句。用户已经看到的行存储在seentable. 这是我的表格的简化版本。uuid用作加入的密钥。uuid_user标识特定用户看到的行。

不太有效:

SELECT * 
  FROM maintable 
  JOIN seentable 
    on maintable.uuid = seentable.uuid 
 WHERE maintable.uuid != seentable.uuid
Run Code Online (Sandbox Code Playgroud)
maintable
uuid (char36)
lng,lat (POINT)
timestamp (timestamp)

seentable 
uuid (char36)
uuid_user (char36)
timestamp (timestamp)
Run Code Online (Sandbox Code Playgroud)

mysql anti-join

0
推荐指数
1
解决办法
949
查看次数