问题标签 [self-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 回答
772 浏览

sql - 在同一张表上的 3 个级别上的一对多连接

我有这个带页面的表,这些页面的父级也是同一个表中的页面。

对于此示例,该表如下所示:

现在我的问题是在创建如下菜单结构时 SQL 会是什么样子:

我目前有这个:

但这几乎不会产生我想要的输出,而且我认为我的做法完全错误......

编辑:

这是我目前拥有的:

而且它似乎有点工作但没有完全递归,第一次递归似乎工作但看起来它没有第二次这样做。

结果:

0 投票
5 回答
474803 浏览

sql - 什么是 SELF JOIN,什么时候使用它?

什么是自加入以及何时使用它?我不明白自我加入,所以用一个例子来做一个外行的解释会很棒。

0 投票
1 回答
467 浏览

c# - 亚音速:自连接,表别名

有没有办法用亚音速进行自连接?

0 投票
1 回答
721 浏览

mysql - MySQL 自联接用于基于 EAV 的库存控制应用程序

这个问题与我在关于库存控制应用程序的原始问题中建议的模式有关。

我正在尝试创建一个 MySQL 查询,为特定项目提供当前库存。

查询正在运行,但我想知道是否有更有效的方法来获取我需要的信息。

这会返回一些类似的东西

看起来很乱,但我可怜的大脑无法想出更好的东西。

有什么建议么?

0 投票
2 回答
4163 浏览

mysql - mysql递归自连接

distinct我可以使用单个自联接找出“X”下包含的所有值吗?

EDIT

就像,这里 X 包含 A、B 和 C A 包含 P P 包含 Q Q 包含 R R 包含 Y Y 包含 C、D 和 E...

所以我想在查询 X 时显示 A、B、C、D、E、P、Q、R、Y。

EDIT

通过编程得到它。

虽然不是同一个表和字段。但我希望你明白这个概念。多谢你们。

0 投票
1 回答
1267 浏览

mysql - MYSQL:自加入时避免重复记录的笛卡尔积

有两个表:表 A 和表 B。它们具有相同的列,并且数据实际上是相同的。它们都具有自动递增的 ID,两者之间的唯一区别是它们对于相同的记录具有不同的 ID。

在这些列中,有一个 IDENTIFIER 列不是唯一的,即两个表中有(非常少)具有相同 IDENTIFIER 的记录。

现在,为了找到表 A 的 ID 和表 B 的 ID 之间的对应关系,我必须在 IDENTIFIER 列上连接这两个表(出于所有目的,它是自连接),如下所示:

但是,由于 IDENTIFIER 不唯一,这会生成 IDENTIFIER 重复值的所有可能组合,我不希望这样。

理想情况下,我想根据它们的顺序在具有重复 IDENTIFIER 值的 ID 之间生成一对一的关联。例如,假设表 A(因此在表 B)中有 6 条 ID 不同但 IDENTIFIER 值相同的记录:

那将是理想的。无论如何,无论 ID 的顺序如何,一种生成一对一关联的方法仍然可以(但不是首选)。

谢谢你的时间,

西尔维奥

0 投票
3 回答
278 浏览

mysql - MySQL 方法:大型自连接来设置值?

我正在使用包含姓氏、地址、性别和出生日期字段的 1200 万条记录的 MyISAM 表:

对姓氏、日期和地址字段进行索引。我的目标是附加一个推断婚姻状况的字段,该字段由以下标准定义:对于每条记录,如果表中存在另一条记录(1)相同的姓氏,(2)不同的性别,(3)相同的地址,和(4)年龄差小于15岁,设已婚=T;否则设置已婚 = F。

作为一个 SQL 新手,我最初的方法是添加一个默认为“F”的 marital 字段,然后使用自连接来设置 MARRIED = T。

虽然这在小表上工作得很好,但我很快了解到我可能会在这个过程完成之前退休,在一个 1200 万行的表上。我的 SQL 知识非常有限,所以我确信这是一种次优方法。有什么建议的替代品吗?也许索引 SURNAME + ADDRESS + CITY?先按 ADDRESS + CITY 分组?更好的餐桌设计?任何建议,将不胜感激。

提前感谢您的帮助!

0 投票
1 回答
509 浏览

mysql - MySQL 涉及疯狂的多个自连接

作为替换一些使用非常慢的嵌套选择的旧代码的过程的一部分,我最终得到了一个如下所示的查询:

所以在最里面的连接中,我正在寻找table_r(copy r1) 中的记录,这些记录与table_d.

在下一次连接中,我在 ( ) 的第二个副本中查找记录,table_rr2主索引 ( ) 与上一次连接中记录r_id的父索引 ( ) 匹配parent_id

然后我尝试使用( )LEFT JOIN的第三个副本进行 a ,只需与前一个联接的匹配即可。这个最外层连接的想法是从 中获取所有记录,然后通过使用进一步的条件(尚未在我的查询中)来确定中的哪些记录具有选择来执行等效的选择。table_rr3r_idr_idtable_rNOT INr3NULLsr2_id

问题是它LEFT JOIN并没有给我全部table_r。它给了我在没有最终连接的情况下获得的相同记录子集——换句话说,与INNER JOIN. 因此,虽然我期待 1208 条记录,但我得到了 508 条记录。

我知道我一定是在做一些古怪的事情……

0 投票
2 回答
8826 浏览

ruby-on-rails - 使用 ActiveRecord 在表上自联接

我有一个名为 ActiveRecord 的Name名称,其中包含各种Languages.

查找一种语言的名称很容易:

但我需要找到语言 1 和语言 2 具有相同名称的匹配对。在 SQL 中,这需要一个简单的自联接:

如何使用 ActiveRecord 进行这样的查询?请注意,我需要查找名称对(= 匹配的两边),而不仅仅是语言 1 中恰好与某些东西匹配的名称列表。

对于奖励积分,请替换n1.normalized=n2.normalizedn1.normalized LIKE n2.normalized,因为该字段可能包含 SQL 通配符。

我也对以不同方式对数据进行建模的想法持开放态度,但如果可以的话,我宁愿避免为每种语言使用单独的表。

0 投票
1 回答
1352 浏览

sql-server-2008 - SQL Server 2008 使用 ISNULL 语句优化 FULL JOIN

大家好

我希望有人可以帮助我改进我必须定期运行的查询。目前执行需要40多分钟。它在这段时间内使用了全部分配的内存,但 CPU 使用率大多在 2% - 5% 之间徘徊,时不时地跳到 40% 几秒钟。

我有这张表(简化示例):

以下是一些输入值:

每个条目都有一个 dteEffectiveDate 字段。此外,每个都有一个 dtePrevious 和 dteNext,它反映了最近的上一个/下一个生效日期的日期。现在我想要的是一个查询,它将计算特定年龄内连续时期之间 Count 字段的中间值。

例如,在上面的数据中,对于 40 岁,我们在 2009/01/01 有 300 个,在 2010/01/01 有 200 个,所以查询应该产生 250。

请注意,年龄 30 只有一个条目,即 10。这是在 2009/01/01。2010/01/01 没有条目,但我们知道此时已捕获数据,因此没有任何内容的事实意味着该日期的 30 为 0。因此查询应该产生 5。

为了实现这一点,我在自身上使用了表的 FULL JOIN,并使用 ISNULL 来选择值。这是我的代码:

输出:

它工作得很好,但是当我在大约 7m 条记录的实际数据上运行它时,执行起来需要很长时间。

有没有人有什么建议?

谢谢卡尔
_