当前位置: 首页 > 面试题库 >

SQL:仅使用每行一次自我联接[重复]

公羊子真
2023-03-14
问题内容

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

A1
A2
A3
B1
B2
C1
C2

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

SELECT mytable.*, self.* FROM mytable INNER JOIN mytable AS self 
   ON (mytable.letter = self.letter and mytable.number != self.number);

此联接提供如下内容:

A1 A2
A2 A1
A1 A3
A3 A1
A2 A3
A3 A2
B1 B2
B2 B1
C1 C2
C2 C1

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

A1 A2
A1 A3
A2 A3
B1 B2
C1 C2

问题答案:

稍微更改JOIN条件将实现您想要的。

代替:

ON (mytable.letter = self.letter and mytable.number != self.number)

使用

ON (mytable.letter = self.letter and mytable.number > self.number)

这将仅包括self.number大于的组合,实际上大于的组合mytable.number实际上将结果限制为每个组合的一个有效顺序。



 类似资料:
  • 问题内容: 我有下表: 现在,我想为每个用户创建所有可能的语言对,这意味着我希望结果集为:对于用户1:(2,7),(7,8),(2,8) 对于用户2:(10,3) 为此,我已经完成了以下查询: 我得到的结果是针对用户1的:(2,7),(7,8),(2,8),(7,2),(8,7),(8,2) 对于用户2:(10,3),(3,10) (10,3)和(3,10)对我来说没有区别 如何删除重复的行? t

  • 问题内容: 我读了许多关于仅获得左联接的第一行的主题,但是由于某种原因,这对我不起作用。 这是我的结构(当然是简化的) 提要 艺人 feeds_artists 现在,我想获取文章并仅加入第一位艺术家,我想到了这样的事情: 只是仅获取feeds_artists的第一行,但已经行不通了。 由于数据库原因,我无法使用,也无法按结果对结果进行分组(因为我需要按日期对它们进行排序(我通过这种方式对结果进行分

  • 我读过很多关于只获得左联接的第一行的文章,但是,由于某些原因,这对我不起作用。 这里是我的结构(当然是简化的) 源 只获得feeds_artists的第一行,但这已经不起作用了。 由于数据库的原因,我不能使用并且我不能按对结果进行分组,因为我需要按日期对它们进行排序(我通过这样分组得到了结果,但结果不是最新的) 也尝试了一些外用的东西--也没有成功。老实说,我真的想象不出这些排是怎么回事--这可能

  • 问题内容: 首先,我正在使用Oracle: 表一名称= 表二名称= 有一个名为的列,有一个名为的列。我想加入到其中,是在某个地方的名字。 我试过的 如何更正此查询? 问题答案: 尝试使用以下语法: Oracle的字符串连接运算符是双管道(||)。无效数字错误是因为Oracle需要’+’运算符的数字操作数。

  • 我有一个Laravel 5.8项目,我需要加入3个表来显示一些结果。 基本上,我已经将所有自定义id存储在一个名为的表中。 例如,这里有两个自定义ID,我需要检索它们的: 所以我试了一下: 但这是错误的,并向我展示了错误: SQLSTATE[42000]:语法错误或访问冲突:1066不唯一 所以我需要这样说: 然后: 我该怎么做呢?

  • 问题内容: 我有一个查询,返回以下行: StateId,OrderId,OrderTime,PermitId 我只需要返回全盘完全重复的行,因此每条记录必须与另一条记录完全相同,这样它才可以重复。我想退回两个记录。这些记录与一堆没有重复的记录混在一起… 任何的想法? 问题答案: 首先,确定重复项。其次,重新加入以提取这些行。 非聚集(或非窗口/排名)自连接形成部分交叉连接,并为任何一组键给出重复的