如何在具有传递性的MySQL连接(同表)中选择不同的对?

2024-03-14

我面临着一个设计非常糟糕的数据库,其中有一个非规范化的表 X。 该表 X 应该与另一个表 Y 具有 N:M 关系。

问题在于,这种关系目前是 1:N,而到目前为止,偷工减料的解决方案是在有多个注册表需要关联时复制条目。

简化一下,我有这个:

| ID | TEXT | LOCATION_ID |
| 1  | foo  |      1      |
| 2  | foo  |      2      |
| 3  | bar  |      1      |
| 4  | bar  |      4      |
| 5  | bar  |      3      |

我必须规范化这张表。因此,我的第一个想法是尝试获取成对的相似注册表。像这样的事情:

| a.ID | b.ID | 
|   1  |  2   |
|   3  |  4   |
|   3  |  5   |

尝试一下:

SELECT a.id, b.id 
FROM mytable AS a 
INNER JOIN mytable AS b 
   ON a.text = b.text AND a.id != b.id 
GROUP BY a.id, b.id

这会导致这样的问题:

| a.ID | b.ID | 
|   1  |  2   |
|   2  |  1   |
|   3  |  4   |
|   3  |  5   |
|   4  |  3   |
|   4  |  5   |
|   5  |  3   |
|   5  |  4   |

这些对是重复的。

经过一番挖掘,我意识到这更有效:

SELECT a.id, b.id 
FROM mytable AS a 
INNER JOIN mytable AS b 
        ON a.text = b.text AND a.id < b.id 
GROUP BY a.id, b.id

所以,我得到了这个:

| a.ID | b.ID | 
|   1  |  2   |
|   3  |  4   |
|   3  |  5   |
|   4  |  5   |

但我仍然需要摆脱最后一个寄存器。


仅在一侧分组并采取MIN() http://dev.mysql.com/doc/en/group-by-functions.html#function_min另一个:

SELECT   MIN(a.ID) a, b.ID b
FROM     mytable a JOIN mytable b ON b.text = a.text AND b.ID > a.ID
GROUP BY b.ID

看到它sqlfiddle http://sqlfiddle.com/#!2/4eab8/1/0.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在具有传递性的MySQL连接(同表)中选择不同的对? 的相关文章

随机推荐

  • 在.NET v4.0中解析MP3文件

    如何解析 MP3 文件以获取其所有属性 另外如何编辑MP3文件的属性 NET v4 0 中有可用的类吗 这些属性称为 ID3 标签 我认为 NET 框架不负责提供对它们的阅读 这是来自 SourceForge 的一些代码 http sour
  • 在 MacOS X 上的 GHCi 中工作的 Haskell 图形库

    是否存在满足以下要求的 Haskell 图形库或绑定到外部库 可以使用从ghci 即我不必链接并重新启动程序 适用于 MacOS X 与 1 结合使用很棘手 可以制作简单的矢量图形 线条 多边形 简单的填充和描边 可以将位图图像放在屏幕上
  • 在lisp中,如何使用floor函数返回的第二个值?

    当我这样做时 4楼3 我得到了 1 1 3 但我该如何使用这 1 3 呢 例如 您可以使用将其绑定到变量multiple value bind multiple value bind quot rem floor 4 3 format t
  • 移动 Safari 与主屏幕 Web 应用程序

    我正在为 iOS 开发一个 web 应用程序 我注意到在移动 safari 上运行和从主屏幕运行之间存在一些奇怪的事情 是否有任何资源可以提供在模式之间切换的通用接口 如果没有 是否有任何资源详细说明这两种模式之间的所有差异和陷阱 我遇到过
  • 将数据从节点传递到jade?

    问题是我渲染视图并发送一些数据 console log products shows an array res render seller sell shop id req user shop id products products 我将
  • Spring Data Rest - 如何从页面中删除元素?

    我的项目中有以下 REST 控制器方法 RequestMapping method GET value applications produces MediaType APPLICATION JSON VALUE public Respon
  • GitHub Probot:错误 probot:签名与事件负载和秘密不匹配

    我正在尝试使用构建 GitHub 应用程序机器人框架 https probot github io 这是文件的内容index js module exports robot gt robot log Yay the app was load
  • docker-compose restart 连接池已满

    我和我的团队正在使用 docker compose 将我们的一些基础设施转换为 docker 一切似乎都工作得很好 我遇到的唯一问题是重新启动它给我一个连接池已满错误 我正在尝试找出造成这种情况的原因 如果我删除 2 个容器或 1 个完整设
  • 如何强制 Ruby 尊重 Net::HTTP 标头中的下划线

    我如何强制 Ruby 尊重 a 中的下划线Net HTTP header uri URI parse url headers api key my private key request Net HTTP Post new uri head
  • 删除node.js中的几个文件

    删除node js中的多个文件的最佳方法是什么 function deleteFiles files callback var files file1 js file2 jpg file3 css deleteFiles files cal
  • 如何在 M1 mac 上安装自制软件

    我刚买了一台新 Mac M1 Macbook pro 我正在尝试安装自制程序 但每次我完成安装时 它都会告诉我它没有写入路径 然后当我尝试建议的任何内容添加到路径 什么也没有发生 终端或其他任何东西根本无法识别该命令 就好像它没有安装一样
  • 在 VBE 中无法查看 Excel 工作表

    我正在使用其他人创建的 Excel 文件 一张包含宏的工作表似乎受密码保护 但我不明白的是我无法在工作表列表下的 VBE 中看到它 工作表选项卡在 Excel 中可见 但我看不到内容 有没有办法在VBE中取消隐藏它 一张包含宏的工作表 这是
  • Rails:Watir 中的代理身份验证(Chrome 驱动程序)

    我尝试添加代理身份验证chrome在 watir 上运行的 webdriver 如下所示 require watir proxies proxy server 185 264 167 184 63109 proxy auth usernam
  • 难以从 iPhone X 上的 2D 区域获取面部标志点的深度(SceneKit/ARKit 应用程序)

    我正在使用 iPhone X 上的前置摄像头运行面部标志检测 并且正在努力获取面部标志的 3D 点 VNFaceLandmarkRegion2D 仅提供图像坐标 X Y 我一直在尝试使用ARSCNView hitTest or ARFram
  • jQuery 如何返回一个数组并且仍然是一个 jQuery 对象?

    我试图重现 jQuery 1 7 1 的对象结构 以更好地理解它是如何工作的 我有以下代码 function window undefined var document window document navigator window na
  • PDF 到 Excel 转换将每个 pdf 页面放在不同的工作表中

    我正在尝试将 pdf 文件 有 16 页 转换为 Excel 文件 以便运行我在 Excel 中已有的程序 我已经有一个将 pdf 转换为 excel 的代码 但我希望宏将 pdf 文件的每个单独页面放入我的 excel 文件中的不同工作表
  • 伪造 WPF 操作事件

    我想使用鼠标 键盘伪造操纵 或触摸 事件 当我尝试使用以下方式引发事件时 RoutedEventArgs e new RoutedEventArgs ManipulationStartedEvent this RaiseEvent e 给我
  • CodeLearn Twitter 教程 TweetAdapter.java 上出现空指针错误

    我目前正在学习 Codelearn Twitter 教程 但我在下面的代码中收到一个空指针 有人可以帮助我吗 public class TweetAdapter extends ArrayAdapter
  • 等待异步 JavaScript 函数返回

    我正在使用第三方库提供的函数 该函数接受一个回调函数作为参数 但我想等待该回调被调用后再继续 有没有标准 可接受的方法来做到这一点 我不确定这是否适合您 但您可以通过将代码分成 2 个函数来实现所需的结果 假设这是您打算做的 基本上这是你原
  • 如何在具有传递性的MySQL连接(同表)中选择不同的对?

    我面临着一个设计非常糟糕的数据库 其中有一个非规范化的表 X 该表 X 应该与另一个表 Y 具有 N M 关系 问题在于 这种关系目前是 1 N 而到目前为止 偷工减料的解决方案是在有多个注册表需要关联时复制条目 简化一下 我有这个 ID