问题介绍:

自连接的内部计算机制:

第一步:生成同一张表格的笛卡尔积。

有序数对:有序数对指的是<1,2>,无序数对指的是{1,2}。对于有序数对,两组数据交换意义不同。即<1,2> 不等于<2,1>。而无序数对{1,2} = {2,1}。

SELECT P1.name AS name_1, P2.name AS name_2
FROM Products P1, Products P2;

执行结果里每一行(记录)都是一个有序对。因为是可重排列,所以结果行数为3^2 = 9。

结果里出现了(苹果, 苹果)这种由相同元素构成的对和(橘子, 苹果)和(苹果, 橘子)这种只是调换了元素顺序的对,这种对在有序数对中代表的意思不同。

第二步:排除相同元素构成的对(比如<苹果,苹果>这种对)

-- 用于获取排列的SQL 语句

SELECT P1.name AS name_1, P2.name AS name_2
FROM Products P1, Products P2
WHERE P1.name <> P2.name;

无论是p1还是p2,可以把这两个表格当成两个不同的表格,只是碰巧数据相同,相当于:

  • P1 里的“苹果”行的连接对象为P2 里的“橘子、香蕉”这两行
  • P1 里的“橘子”行的连接对象为P2 里的“苹果、香蕉”这两行
  • P1 里的“香蕉”行的连接对象为P2 里的“苹果、橘子”这两行

第三步:对相同元素构成的对去重(即只保留<苹果,橘子>,<橘子,苹果>对中的一个)

SELECT P1.name AS name_1, P2.name AS name_2
FROM Products P1, Products P2
WHERE P1.name > P2.name;

以上的结果是首先将字符按照首字母排序,可以发现结果是香蕉>苹果>橘子,根据上文条件,橘子可以跟比它大的两个字符结合,苹果可以跟香蕉结合,而香蕉最大,则没有可以匹配的数据。

第四步:将所有元素排成一行

-- 用于获取组合的SQL 语句:扩展成3 列
SELECT P1.name AS name_1, P2.name AS name_2, P3.name AS name_3
FROM Products P1, Products P2, Products P3
WHERE P1.name > P2.name
AND P2.name > P3.name;

Leetcode习题:

180题:连续出现的数字

编写一个 SQL 查询,查找所有Logs表中至少连续出现三次的数字。

Logs 表
结果表
select distinct l1.Num as ConsecutiveNums
from Logs l1,Logs l2, Logs l3
where l1.Id = l2.Id-1 #合并规则,按照id+1来合并
and l2.Id = l3.Id-1
and l1.Num = l2.Num   #筛选规则
and l2.Num = l3.Num

等值连接_sql高阶教程:非等值自连接相关推荐

  1. python openpyxl读写xlsx_python高阶教程-python操作xlsx文件(openpyxl)

    本篇内容来自原创小册子<python高阶教程>,点击查看目录. 背景 在处理一些作业时,经常会碰到统计未交人数.分数等需求,虽然我们在数据库中有了对应的数据, 但是数据库只是面向开发者的, ...

  2. hexo高阶教程:想让你的博客被更多的人在搜索引擎中搜到吗?

    本文首发在我的个人博客:http://cherryblog.site/,欢迎大家前去参观,顺便求fork,么么哒~ 上一次在掘金上发表的hexo高阶教程:hexo高阶教程next主题优化之加入网易云音 ...

  3. MarkDown 的常用高阶教程

    写在前面 接触 Markdown (以下用 MD 代替)已经有快两年,最早接触时震撼于其强大的书写格式,现在已经养成日常的文档编辑习惯.比如现在公司的代码规范.入职指南.内部平台教程与需求文档,我全部 ...

  4. tensorflow高阶教程:tf.dynamic_rnn

    引言 TensorFlow很容易上手,但是TensorFlow的很多trick却是提升TensorFlow心法的法门,之前说过TensorFlow的read心法,现在想说一说TensorFlow在RN ...

  5. python高阶教程译文_高级教程 — PyMOL中文教程 2020.09 文档

    PyMOL脚本.命令.插件¶ PyMOL支持Python 编程语言,故可以借助python让pymol无所不能,pymol除了显示软件,也能成为计算软件. 脚本:把pymol作为一个模块,实现一些计算 ...

  6. python字典排序及字典集合去重高阶教程

    学习目标: 字典dict排序:指定按照key排序或values排序. 对字典或者list去除重复元素. 学习内容: 提示:准备 dicta ={'a':1,'b':2,'d':7,'c':23,'m' ...

  7. MySQL高阶教程索引

    导语:本教程是笔者用mysql做了一年多简单的开发后,对MySQL有了一定的理解,为了夯实自己的MySQL数据库基础,对MySQL进行了二次学习,期间记下了很多笔记,本教程即是以这些笔记为大纲,内容详 ...

  8. ps入门教程高阶教程各工作领域视频教程合集

    PS在工作中的运用非常之广泛,在这里推荐一些系统的PS教程大家,从初级到进阶教程,涉及不同的职业或者岗位,学习起来更方便和系统. ps高清视频教程入门到精通:zhpsjc.top PS教程及其在行业中 ...

  9. think-cell高阶教程(1)——单一窗口管理所有数据链接的自动更新

    think-cell是功能强大的图表制作和布局软件 think-cell 可协助您在几分钟内创建令人惊艳的图表.推动幻灯片布局,并自动执行定期报告.使用单一 PowerPoint 加载项可以实现所有这 ...

最新文章

  1. 在jsp调试后端绑定对象
  2. BlendMode颜色混合模式枚举值
  3. 神经网络的耦合作用与规范场
  4. i219v linux,I219V高传播延迟
  5. html5自动添加数据库,HTML5本地存储之如果没有数据库究竟会怎样
  6. android intent和intent action大全
  7. Tuxera NTFS教程:在Mac上如何将MS-DOS文件系统格式化为NTFS文件系统?
  8. 二叉排序树的第k个结点
  9. windows环境下安装npm、cnpm、bower
  10. 判断数组、集合list、string、int、double等是否为空,判断是否为值类型
  11. LSTM 手动实现车牌识别 Pytorch代码
  12. python爬虫: 爬一个英语学习网站
  13. 2021徐州市36中学高考成绩查询,关注!徐州四星级高中高考成绩公布!江苏13市高分学霸真颜曝光!...
  14. android自动对焦第一次对焦,Android自定义相机实现自动对焦和手动对焦
  15. 实时可视化大数据项目01 -- 项目介绍
  16. 如何让c语言输出字符响一声,printf()用法
  17. Chatgpt到底有多牛?
  18. [BZOJ4399]魔法少女LJJ(线段树合并)
  19. 股票量化分析工具QTYX使用攻略——形态选股结果回测(更新v2.5.6)
  20. 人体检测技术之毫米波雷达

热门文章

  1. hdu3037 Lucas定理
  2. Citrix虚拟化技术之一XenServer6.2安装
  3. Android组件的通讯-Intent
  4. hdu 5492(矩阵模型的变形)
  5. nyoj7街区最短路径问题
  6. shell脚本常用命令
  7. windows下tensorflow安装
  8. 将0移到最后,在原数组操作,并且不能改变源数据顺序(JS编程)
  9. iometer测试工具
  10. RabbitMQ headers Exchange