问题标签 [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.
sql - 在同一张表上的 3 个级别上的一对多连接
我有这个带页面的表,这些页面的父级也是同一个表中的页面。
对于此示例,该表如下所示:
现在我的问题是在创建如下菜单结构时 SQL 会是什么样子:
我目前有这个:
但这几乎不会产生我想要的输出,而且我认为我的做法完全错误......
编辑:
这是我目前拥有的:
而且它似乎有点工作但没有完全递归,第一次递归似乎工作但看起来它没有第二次这样做。
结果:
sql - 什么是 SELF JOIN,什么时候使用它?
什么是自加入以及何时使用它?我不明白自我加入,所以用一个例子来做一个外行的解释会很棒。
c# - 亚音速:自连接,表别名
有没有办法用亚音速进行自连接?
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
通过编程得到它。
虽然不是同一个表和字段。但我希望你明白这个概念。多谢你们。
mysql - MYSQL:自加入时避免重复记录的笛卡尔积
有两个表:表 A 和表 B。它们具有相同的列,并且数据实际上是相同的。它们都具有自动递增的 ID,两者之间的唯一区别是它们对于相同的记录具有不同的 ID。
在这些列中,有一个 IDENTIFIER 列不是唯一的,即两个表中有(非常少)具有相同 IDENTIFIER 的记录。
现在,为了找到表 A 的 ID 和表 B 的 ID 之间的对应关系,我必须在 IDENTIFIER 列上连接这两个表(出于所有目的,它是自连接),如下所示:
但是,由于 IDENTIFIER 不唯一,这会生成 IDENTIFIER 重复值的所有可能组合,我不希望这样。
理想情况下,我想根据它们的顺序在具有重复 IDENTIFIER 值的 ID 之间生成一对一的关联。例如,假设表 A(因此在表 B)中有 6 条 ID 不同但 IDENTIFIER 值相同的记录:
那将是理想的。无论如何,无论 ID 的顺序如何,一种生成一对一关联的方法仍然可以(但不是首选)。
谢谢你的时间,
西尔维奥
mysql - MySQL 方法:大型自连接来设置值?
我正在使用包含姓氏、地址、性别和出生日期字段的 1200 万条记录的 MyISAM 表:
对姓氏、日期和地址字段进行索引。我的目标是附加一个推断婚姻状况的字段,该字段由以下标准定义:对于每条记录,如果表中存在另一条记录(1)相同的姓氏,(2)不同的性别,(3)相同的地址,和(4)年龄差小于15岁,设已婚=T;否则设置已婚 = F。
作为一个 SQL 新手,我最初的方法是添加一个默认为“F”的 marital 字段,然后使用自连接来设置 MARRIED = T。
虽然这在小表上工作得很好,但我很快了解到我可能会在这个过程完成之前退休,在一个 1200 万行的表上。我的 SQL 知识非常有限,所以我确信这是一种次优方法。有什么建议的替代品吗?也许索引 SURNAME + ADDRESS + CITY?先按 ADDRESS + CITY 分组?更好的餐桌设计?任何建议,将不胜感激。
提前感谢您的帮助!
mysql - MySQL 涉及疯狂的多个自连接
作为替换一些使用非常慢的嵌套选择的旧代码的过程的一部分,我最终得到了一个如下所示的查询:
所以在最里面的连接中,我正在寻找table_r
(copy r1
) 中的记录,这些记录与table_d
.
在下一次连接中,我在 ( ) 的第二个副本中查找记录,table_r
其r2
主索引 ( ) 与上一次连接中记录r_id
的父索引 ( ) 匹配parent_id
。
然后我尝试使用( )LEFT JOIN
的第三个副本进行 a ,只需与前一个联接的匹配即可。这个最外层连接的想法是从 中获取所有记录,然后通过使用进一步的条件(尚未在我的查询中)来确定中的哪些记录具有选择来执行等效的选择。table_r
r3
r_id
r_id
table_r
NOT IN
r3
NULLs
r2_id
问题是它LEFT JOIN
并没有给我全部table_r
。它给了我在没有最终连接的情况下获得的相同记录子集——换句话说,与INNER JOIN
. 因此,虽然我期待 1208 条记录,但我得到了 508 条记录。
我知道我一定是在做一些古怪的事情……
ruby-on-rails - 使用 ActiveRecord 在表上自联接
我有一个名为 ActiveRecord 的Name
名称,其中包含各种Languages
.
查找一种语言的名称很容易:
但我需要找到语言 1 和语言 2 具有相同名称的匹配对。在 SQL 中,这需要一个简单的自联接:
如何使用 ActiveRecord 进行这样的查询?请注意,我需要查找名称对(= 匹配的两边),而不仅仅是语言 1 中恰好与某些东西匹配的名称列表。
对于奖励积分,请替换n1.normalized=n2.normalized
为n1.normalized LIKE n2.normalized
,因为该字段可能包含 SQL 通配符。
我也对以不同方式对数据进行建模的想法持开放态度,但如果可以的话,我宁愿避免为每种语言使用单独的表。
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 条记录的实际数据上运行它时,执行起来需要很长时间。
有没有人有什么建议?
谢谢卡尔
_