expore_inload 2019-04-05 13:39 采纳率: 0%
浏览 390
已采纳

sql代码解释(关于自联结,where子句)

在Access2016数据库中的一张表,有三个字段,字段以及相应的数据如下:

p   n   i
1   a   1
2   b   2
2   c   3
3   d   4
3   e   5
4   f   6
字段名分别是p,n,i,表名记为aa。字段p和i的内容均为数字,n的内容为文本。

图片说明

在查询的SQL视图中输入如下语句:

SELECT p
FROM aa AS t1
WHERE p in (select p from aa t2 where t1.n < t2.n);

点击运行后,得到如下的结果:

查询结果

目前不太懂这句sql语句的含义,为什么运行之后会得到这样的结果,希望懂行的人能帮忙解释下。

这句话涉及自联结,难点在于where子句,本来想先看select子句,奈何t1表是在select主句中用到,所以比较难推理。

  • 写回答

1条回答 默认 最新

  • 当否 2019-04-05 15:13
    关注

    重点在于sql语句的执行顺序,首先被执行的是from关键字,将你要操作的表建立成虚拟表t1,t2,接着是where,子句的where是在比较t1t2的n字段,这里的比较是通过p字段来识别的,结果集返回n字段为b和d这两行数据,然后最后主句的where条件筛选了这个临时的结果集的p字段展示。也就是说这个句子是在找n字段更小的记录。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作