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

sql - 来自 sql 中的交叉连接的组合(不是排列)

如果我有一个表,我想交叉连接到自身,我怎样才能删除重复的行?或者换句话说,我怎样才能做一个“顺序无关紧要”的交叉连接?

例如,如果我有一个表 T:

我交叉加入自己,这样我就不会得到 A | 一排

我会得到以下信息:

但是,对我来说,A,B 与 B,A 相同。

有没有删除这些重复项的好方法?换句话说,我想要组合而不是排列。

0 投票
2 回答
304 浏览

php - MySQL/PHP 消除从 MySQL 自连接返回的重复、不相同的结果

我有一个小型数据库,保存了不到 400 匹小马的详细信息。我希望查询该表并返回一个显示每只小马的相关详细信息的表,以及它的所有者和饲养员的姓名。数据主要是这样保存的:

  1. profile - 一个表格,其中包含分配给每个小马的所有信息,包括它的父亲和母亲的注册号,以及它的所有者和饲养者的 DB 分配的 ID。
  2. 联系人 - 人们信息的表格。在下面的查询中以“所有者”的身份加入并再次以“饲养员”的身份加入。
  3. prm_* - 多个参数表,包含颜色、品种等广泛的详细信息。

我遇到麻烦的地方是在尝试我的第一次自我加入时:查询配置文件表三次,以检索每个配置文件的父亲和母亲的名字,以及小马自己的名字。当我运行查询时,它会返回许多(不是全部)配置文件的重复行。使用 DISTINCT 消除了大部分问题,但问题仍然存在于结果不一致的情况下,特别是对于那些没有父亲或母亲记录的小马。

我已经用谷歌搜索了这个问题,它确实出现在这里和那里,但我不能完全理解给出的解决方案中发生了什么。我什至不确定为什么会出现问题。有人可以帮我解决这个问题并解决它吗?我将不胜感激。

我的查询就目前而言(返回 408 个结果,仅来自 387 匹小马!):

0 投票
1 回答
58 浏览

sql - 需要帮助优化“不在”查询

我有一个要优化的 SQL 查询。

基本上需要获取 ALERT_ORIGIN 为“FOO”的所有行,这些行在与 ALERT_ORIGIN“BAR”的同一个表中没有对应的行。该表包含大约 17000 行,并且只有大约 1000 条带有 ALERT_ORIGIN “BAR”的记录。所以我的查询应该给我大约 16000 行。

编辑:当前查询非常慢。我目前没有任何索引。

0 投票
2 回答
291 浏览

oracle - Outer join and self-refer in Oracle

I have customers with contract at various sites which must be charged.

There are two types of billing address for the sites: sites charged at the customer's address and sites charged to another address. The kind of site is handled by the field 'status': if the site is charged at the customer's address, the field is equal to 'C'. If it is charged to a different site's address, it is equal to 'A' and the field 'bill_site_id' is filled with the 'site_id' used for billing. I want to retrieve, in one query, the address where I have to send the bill...

Let's say a customer have two sites (the A refers to the B for billing); the request obviously shows the two sites, but I only want the one used for billing (the B). How to retrieve this one only?

Here is my query (anonymized, so please be gentle :-) )

0 投票
1 回答
9190 浏览

sql - SQL:每行只使用一次自连接

可能重复:
来自 sql 中的交叉连接的组合(不是排列)

我目前有一张包含以下记录的表格:

其中相同的字母表示一些共同的标准(例如,“字母”列的共同值)。我按照以下标准进行自我加入:

此连接提供如下内容:

但是,我只想将每一对包含一次(组合而不是排列)。我将如何获得以下信息:

0 投票
2 回答
4387 浏览

mysql - 如何使用 Group By 和 self-join 返回最小、最大、打开和关闭每日价格结果集?

解决了

万岁 StackOverlow!

当我离开时,人们留下了 2 个解决方案(谢谢大家——为两个工作解决方案分配业力的协议是什么?)

这是我回来发布的解决方案。它源自另一个 StackOver 解决方案:

如何使用聚合函数在 MySQL 查询中获取分组记录的第一条和最后一条记录?

...我的适应是:

上面“Q”开头的数据是我试图结束的数据。希望这对其他人有所帮助,因为我怀疑我的日志相当普遍。

我敢打赌,这三种解决方案中的一种具有性能优势。如果有人碰巧知道 MySQL 的内部工作原理和查询优化并愿意推荐“首选”解决方案,那么将来了解这将很有用。

最终解决

更新#2

尝试使用这个从另一个方向来实现它:

http://forums.mysql.com/read.php?65,363723,363723

我得到:

这与下面第一个 UPDATE 中的查询有类似的功能障碍;返回的 'clsqt' (cls_price) 值是在数据中找到的最后收盘价。布莱赫。

另外,我们开始再次进入“极其复杂”的查询空间,这对性能没有好处。

但是,如果有人看到 'clsqt' 值的修复,我会很高兴地接受它并在以后解决性能问题。:)

结束更新 #2

更新

如此接近......这就是我今天的位置:

这将正确地重新调整所有内容,但正确的“cls_price”(“cls_price”的返回值与“opn_price”的值相同)。

但是,“cls_date1”和“cls_date3”是正确的值,所以我必须接近。

有人看到我不是什么吗?

结束更新

关于左连接和自连接,我一直在研究 SO……而且我必须承认我并没有在摸索。

我发现这个“Q”似乎非常接近我想要的: left join with condition for right table in mysql

我要做的是从单个表中检索开盘价、收盘价、最低价和最高价天数(下面的示例数据)。

最小值和最大值很简单:

我希望按日期分组返回结果,例如:

好的,所以我只用一个连接来尝试“婴儿步骤”......

...我收到消息“无效使用组功能”

当然,删除“GROUP BY”没有帮助,因为我需要返回聚合列。

我有一个非常复杂的解决方案,可以获得打开和关闭结果,但不是最小值和最大值——它们位于不同的结果集中。我觉得我已经使这比必要的更复杂,并且我可以理解上面提到的“Q”中引用的自连接发生了什么,我的整体编码将无法估量地即兴发挥。但在过去的周末,我花了大约 12 个小时在这上面,而且比以往任何时候都更加困惑。

在这一点上,欢迎所有的洞察力、解释和观察......

0 投票
2 回答
121 浏览

sql - 自加入表格

查找其他人推荐的所有客户的姓名。

输出应该是 dolly dilly 和 meena kimi。

我已成功找到通过查询转发他人的客户

0 投票
1 回答
76 浏览

tsql - 在自联接查询中将记录限制在联接的一侧

考虑如下表(名称 Term):

现在,考虑定义了两个类别:CategoryId 1 和 CategoryId 2,并且有多个术语属于 category1 或 category2。我试图在这两个类别中或在这两个类别中的一个类别中找到具有相同 URI 但标签不同的术语。为此,我尝试编写一个自联接 SQL:

这工作正常,但每行返回两次......例如,

TermId1、TermId2 TermId2、TermId1

如果 termId1 与 termId2 不同,则不需要逆序结果。那么,我应该如何获得一次结果呢?

感谢您的帮助,

0 投票
2 回答
799 浏览

histogram - 关系 R 上的自连接操作的估计大小,给定 R 的直方图

查询优化器通常使用数据分布摘要来估计查询处理期间生成的中间表的大小。一种流行的此类汇总方案是直方图,其中输入范围被划分为桶,并保持每个桶中落入的元组数量的累积计数。出于估计的目的,假设桶内的分布是均匀的。

下面显示了一个R关于离散属性 a 与域的关系的直方图[1..10]

自联接操作 R x R 的估计大小是多少

解决方案中给出的答案:B

答案是如何计算的?

0 投票
5 回答
14328 浏览

sql-server - 如何在 SELF JOIN 中使用 GROUP BY?

我有一个人表,可以同时容纳人和他的经理。
我正在使用 SELF JOIN 来选择经理的电子邮件,但我收到了很多重复的邮件。

http://imageshack.us/photo/my-images/3/withoutgroupby.png

如何在查询中使用 GROUP BY

按 M.prs_id 分组

如果我在查询末尾添加此行以按 Manager_id 分组,我会收到此错误

列 'qrd_prs_person.prs_id' 在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。