问题标签 [semi-join]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
803 浏览

sql - 在 SQL 子查询中使用多个表进行 Oracle 半连接

这个问题是如何解决子查询中具有多个表的半连接的明显 oracle 限制。我有以下 2 个 UPDATE 语句。

更新1:

执行计划表明这正确执行了 2 个半连接,并且更新在几秒钟内执行。这些需要是半连接,因为c.id2它不是唯一的外键b.id2,与b.idand不同a.id。并且update_in根本没有任何约束,因为它是一个数组。

更新 2:

这不会进行半连接;我相信基于 Oracle 文档,这是因为 EXISTS 子查询中有 2 个表。由于表的大小和分区,此更新需要数小时。但是,除了在同一行之外,没有其他方法可以关联d.time关联的d.start_time和。d.end_time我们传入update_in数组并在这里加入它的原因是因为在循环中为每个 time/start_time/end_time 组合运行此查询也证明性能很差。

除了 2 个表之外,还有其他原因导致半连接无法正常工作吗?如果没有,有没有办法绕过这个限制?我缺少一些简单的解决方案,可以使这些标准工作而无需在子查询中放置 2 个表?

0 投票
2 回答
1953 浏览

apache-spark - 在两个 Spark RDD(在 PySpark 中)上进行半连接的正确方法是什么?

在我的 PySpark 应用程序中,我有两个 RDD:

  • items - 这包含所有有效项目的项目 ID 和项目名称。大约 100000 项。

  • 属性表 - 这包含字段用户 ID、项目 ID 和此组合的属性值。这些是系统中每个用户-项目组合的特定属性。这个 RDD 有几百行,每行 1000 行。

我想丢弃属性表 RDD 中与项目 RDD 中的有效项目 ID(或名称)不对应的所有行。换句话说,通过项目 ID 进行半连接。例如,如果这些是 R 数据帧,我会做semi_join(attributeTable, items, by="itemID")

我首先尝试了以下方法,但发现这需要永远返回(在我的 PC 上的 VM 上运行的本地 Spark 安装上)。可以理解的是,因为涉及的比较数量如此之多:

经过一番摆弄,我发现以下方法工作得非常快(在我的系统上一分钟左右)。

尽管这对我的应用程序来说效果很好,但感觉更像是一种肮脏的解决方法,我很确定在 Spark 中必须有另一种更清洁或惯用正确(并且可能更有效)的方式来做到这一点。你有什么建议?我是 Python 和 Spark 的新手,所以如果您能指出正确的资源,任何 RTFM 建议也会有所帮助。

我的 Spark 版本是 1.3.1。

0 投票
1 回答
704 浏览

mysql - MySQL 复杂的半连接无分组依据

概括

我正在寻找一个半联接(ish)查询,该查询选择许多客户并从其他表中联接他们的最新数据。

稍后,我希望直接将条件附加到查询的末尾:WHERE c.id IN (1,2,3)

问题

据我所知,我的要求排除了GROUP BY

对于大多数基于子查询的尝试,我的问题是一样的。

作为一个额外的挑战,我不能严格使用半联接,因为我允许至少两种类型的电话号码(移动电话和固定电话),它们来自同一个表。因此,从电话表中,我可能会加入每个客户的多个记录,即这不再是半加入。下面我当前的解决方案说明了这一点。

问题

  • EXPLAIN底部的结果对我来说看起来很高效。我对么?每个子查询是否只执行一次更新:似乎DEPENDENT SUBQUERY对外部查询中的每一行执行一次。如果我们能避免这种情况,那就太好了。
  • 我正在做的事情有更好的解决方案吗?

DDL

到目前为止的解决方案

小提琴

这个小提琴使用给定的解决方案给出了适当的结果集。请参阅我上面的问题。

http://sqlfiddle.com/#!9/98c57/3

0 投票
1 回答
108 浏览

r - 执行半反连接(在二进制搜索中)

我想data.table通过选择第一个键并排除第二个键来对 a 进行子集化。

我的第一直觉没有奏效(!操作太早):

这似乎太不雅了,但有效:

这也有效,但这种方法牺牲了一些功能(例如,访问:=on DT):

我是否已经用尽了我的选择,或者我错过了什么?

0 投票
2 回答
267 浏览

r - semi_join 在 R 中但拉回重复项

我遇到了来自 dplyr 的 semi_join 问题。理想情况下,我想对 dfA 与 dfB 进行半联接。dfA 具有重复值,dfB 也是如此。我想从 dfA 中撤回所有与 dfB 匹配的值,甚至在 dfA 中重复。

我想得到的是上面的 dfC 输出。因为至少有 1 个 x 匹配,所以它会拉回 dfA 中的所有 x

两者都没有给我正确的结果。任何帮助都会很棒!提前致谢

0 投票
3 回答
49912 浏览

sql - 什么是数据库中的半联接?

我在尝试理解半连接的概念以及它与传统连接的不同之处时遇到了麻烦。我已经尝试了一些文章,但对解释不满意,有人可以帮我理解吗?

0 投票
4 回答
2463 浏览

r - R将多个文件合并到1个数据框中并保留所有值

我有 6 个多个文件,每个文件只有 1 列名称。我想读取所有这些文件并将它们组合在 1 个数据框中,使其看起来像这样:

结果colnames数据框的 应该代表实际的文件名。假设我读取的文件名为file1.txtfile2.txt依此类推..

任何帮助都感激不尽。

到目前为止我一直在尝试什么:

如此处所见,它将所有值 ( names) 组合在一列中。

0 投票
2 回答
3122 浏览

mysql - Google BigQuery 上的最佳 JOIN 性能

我有两个大表,一个基表和一个用于过滤的表。我想要“my_filter”为真的键。

哪一个为我提供了最佳性能的 Google BigQuery?

标准连接

加入子查询

半连接

对于上下文:Google BQ 文档讨论了半连接,但没有解释为什么要使用它们。

0 投票
1 回答
394 浏览

r - R:比较两个表中的列是否存在缺失值,并在新列中产生 True False

我有想要比较的电子邮件数据。为了收集数据,我必须从单独的表中提取发送、交付、打开等,所以我基本上有 5 个具有相同信息的数据帧,但发送表有 100% 的已邮寄用户 ID。交付、打开等表包含完全相同的变量/列,但行数越来越少,因为并非每个发送电子邮件的人都打开它、单击它等。

我想做的是将所有这些合并到发送的数据框中,创建一个新列,其中每个用户都有一个 Y/N,说明该用户是否收到电子邮件,打开它,单击,通过比较用户 ID 是否存在于后续表格中。所以有点半连接,但我只想在第一个表中创建一个新列,说明每个唯一的 USER ID 是否存在于其他表中。简化的例子,我有下面两个表中的第一列。

尝试使用 mutate 和 match,然后使用 ifelse,但到目前为止还没有骰子。

谢谢!

0 投票
2 回答
108 浏览

mysql - MySQL子查询IN多个值

我有 2 张桌子:

表格报告

表reports_access

我需要根据登录用户的group_id访问报告,一个用户属于多个组。

我试过 :

我收到了这个错误:

子查询返回超过 1 行

我不明白我是否可以使用一个请求来做我想做的事,因为我需要测试一个数组是否属于另一个数组。

我错过了什么 ?