问题标签 [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 投票
5 回答
1620 浏览

sql - 在 SQL 中使用可变模式持久化复杂类型的最有效方法

我在做什么

我正在创建一个 SQL 表,它将为复杂类型的对象提供后端存储机制。我正在尝试确定如何以最佳性能实现这一目标。我需要能够查询复杂类型的每个单独的简单类型值(例如,地址复杂类型中城市的字符串值)。

我原本以为我可以将复杂类型值作为 XML 存储在一条记录中,但现在我担心这种设计的搜索性能。 我需要能够在不改变数据库访问层的任何内容的情况下即时创建变量模式


我现在在哪里

现在我正在考虑创建以下表格。

从这些表中,在执行查询时,我会在值表上执行一系列自联接。当我想通过 DocumentId 获取整个对象时,我将有一个通用脚本来创建一个模拟复杂类型的非规范化数据表的视图。


我想知道的

我相信有更好的方法来完成我想要做的事情,但我对不同 SQL 技术的相对性能优势有点太无知了。具体来说,我不知道以下性能成本:

我将不胜感激有关 sql 中这些性能问题的任何信息或资源,以及有关如何以更有效的方式解决此一般问题的建议。


例如,

这是我目前计划做的一个例子。

我有一个 C# 类地址,看起来像

一个实例是由new Address{Line1="17 Mulberry Street", Line2="Apt C", City="New York", State="NY", Zip="10001"}

它的 XML 值看起来像。

使用上面的 db-schema,我将在 Schemas 表中有一条记录,其中包含地址 xml 模式的 XSD 定义。该实例将具有一个唯一标识符(Documents 表的 PK),该标识符分配给 Schemas 表中 Address 记录的 SchemaId。然后在 Values 表中将有五个记录来表示此地址。

它们看起来像:

刚刚添加了一个赏金...

我的目标是获得我需要的资源,以便为我的应用程序提供一个完全可搜索的数据访问层,并具有从应用程序层生成的数据模式,不需要直接的数据库配置(即创建一个新的 SQL 表)为了向域模型添加一个新的聚合根。

我对使用除 SQL 之外的 .NET 兼容技术的可能性持开放态度,但我要求任何此类建议都得到充分证实才能考虑。

0 投票
1 回答
20323 浏览

ruby-on-rails - Rails:自引用 has_many 模型如何工作?

所以,我正在开发一个应用程序,我希望用户能够在“文件夹”中对对象进行分组。基本上:

User has_many :foos

Foos 不必在文件夹中,但可以。在这种情况下:

Folder has_many :foosFoo belongs_to :folder

现在,我希望能够设置文件夹以便它们可以嵌套。我觉得这有点像...

Folder has_many :folders

我听说这种自我参照关系没什么大不了的,但我真的不明白它是如何工作的。我无法弄清楚这应该如何在模型中声明以及我需要在数据库中提供哪些列。

谁能提供一个例子?我还重视任何建议/提醒/警告/经验教训,您可以提供有关在应用程序中建立这种关系的建议。

谢谢!

0 投票
1 回答
7863 浏览

mysql - MySQL加入同一张表

我有一张表(称为暂存),其中包含以下相关字段:

我需要搜索bundle_code为10的bundle_id,然后还检索具有相同bundle_id(其中product = H)的任何其他记录以及最多两个具有相同bundle_id(其中product!= H)的其他记录。我正在尝试这样做多合一查询,每个 bundle_id 返回一行;所以我有一个 bundle_id 列表,每个包含附加到该 bundle_id 的每个产品和 id。

我想出的最好的是:

如果总共有四个结果,这似乎可以正常工作,但如果有三个结果,则一组数据是重复的(在这种情况下,它是 id 1691):

如果我添加额外的 WHERE 子句来尝试阻止这种情况,它会返回零行,所以我认为我的 JOIN 语法在某个地方不正确。有任何想法吗?

0 投票
1 回答
1005 浏览

mysql - 从 MySQL 结果中过滤等效但不重复的行

为了促进兄弟会的联系,我正在尝试设计一个系统,让人们可以评估他们彼此了解的程度,然后它将匹配那些彼此了解最少的人。这是评级表的样子:

我想设计一个查询来选择每对的平均评分。到目前为止,我有这个:

这在大多数情况下都有效,但它包含冗余数据:

看看第 1 行和第 2 行、第 3 行和第 4 行、第 5 行和第 6 行虽然不是重复的,但本质上是相同的。有没有办法可以过滤掉那些多余的行?

0 投票
2 回答
236 浏览

mysql - MySQL查询问题

我有一个包含航空公司路线数据的数据库。其中一些属性是sources_airport_ID、destination_airport_ID 和airline(支持从源到目的地的路线)。我正在尝试自行加入表格以查找具有相同路线的航空公司(换句话说,相同的sources_airport_ID 和destination_airport_ID)。

我使用的查询如下:(表名=路由)

当我执行此查询时,我收到一条错误消息,指出最大执行时间超过 300 秒。我不确定我是否为此目的使用了正确的查询。谁能帮我查询?我使用 xampp 作为我的数据库。

提前致谢!

编辑:我的主键是 ID,它只是一个自动增量值。路由表中有 64,114 条记录。

0 投票
5 回答
1239 浏览

sql - PLSQL 中的自联接

我有一个表 P,其中包含 personid 列和 licensetypeid 列。

每个人都可以拥有多种许可证类型,为该人 ID 向表中添加额外的行。

我需要找到 personid 的 licenseid 为 1 和 5 的行。

我不能写:

我听说我应该使用自加入来执行此操作。如何进行自我加入以解决此问题?

0 投票
1 回答
1476 浏览

sql-server - UPDATE Using Self Join and Aggregates

I'm trying to update a table using a self join and aggregates.

For example, a table has the following columns:

store, item, price, lowprice, lowprice store

I need to populate lowprice and lowprice store.

The lowprice would be:

The lowprice store would be the store with the min(price) for each item.

I'd love to be able to take it a step further as well. Say two stores offer an item at the same lowprice. Then the value for lowprice store would be 'store a/store b' but this part is less important.

I'm using SQL Server.

0 投票
1 回答
12280 浏览

jpa - 如何在 JPA 中实现自我加入?

我有一张如下表:

我尝试为这个表实现一个实体,代码片段就像:

但我总是在使用 getParent 或 getChildren 时失败?有人可以给我任何建议吗?

0 投票
3 回答
641 浏览

mysql - MYSQL SQL(自)加入?

使用此示例数据集:

我正在寻找 3 列的表格。

Col A“Id”订单作为原始的 Desc。

Col B“Id2”作为 col A 中的上一行或下一行 ID,其中 CCC 相同。

或者

或者

我可以在连接表中添加一个自动增量列,然后向上或向下使用 1、2、3 行吗?那么 id2 将基于这个自动增量行吗?

0 投票
1 回答
5240 浏览

mysql - 连接两个表(具有 1-M 关系),其中第二个表需要“展平”为一行

给定下表:

学生

注册

我想要以下

注意 1:我知道 mysql 不能有动态列(如果我错了,请纠正我!)所以我对查询开头很满意:

我对此感到满意,因为有固定数量的课程(确切地说是 4 个)。理想情况下,我希望它是动态的;也就是说,不必在 SELECT 子句中手动编写每门课程。

注2:这需要mysql pure - 我不想求助于PHP。

该数据库目前有 10000 多名学生,有 10000+ * 4 名学生(因为正好有 4 门课程,每个学生都在所有 4 个模块中)。

注 3: Student.user_id 已编入索引,enrollment.enrollment_id、enrollment.student_id 和enrollment.course_id 也是如此。