Sql 在外部select语句中未选择的子查询中使用附加表进行自联接

Sql 在外部select语句中未选择的子查询中使用附加表进行自联接,sql,sqlite,Sql,Sqlite,我是Sql新手,这也许可以解释为什么我根本无法理解这一点 我有两张来自理论社交网络的表格。一个叫“高中生”,一个叫“喜欢”“高中生”有idPK、姓名和年级等信息,而“喜欢”有id1和id2,这两个id仅表示高中生的哪个id彼此“喜欢”,id1“喜欢”id2。喜欢不一定是相互的 查询:对于每个喜欢比自己小两个或两个以上年级的学生,返回该学生的姓名和年级,以及他们喜欢的学生的姓名和年级 这: 返回的结果不正确。事实上,正确的结果甚至不在我从这个查询得到的结果中。我仍在尝试将我的脑袋绕到join上,我

我是Sql新手,这也许可以解释为什么我根本无法理解这一点

我有两张来自理论社交网络的表格。一个叫“高中生”,一个叫“喜欢”“高中生”有idPK、姓名和年级等信息,而“喜欢”有id1和id2,这两个id仅表示高中生的哪个id彼此“喜欢”,id1“喜欢”id2。喜欢不一定是相互的

查询:对于每个喜欢比自己小两个或两个以上年级的学生,返回该学生的姓名和年级,以及他们喜欢的学生的姓名和年级

这:

返回的结果不正确。事实上,正确的结果甚至不在我从这个查询得到的结果中。我仍在尝试将我的脑袋绕到join上,我觉得这在这里会很有用,但我不知道这在self-join中是如何工作的

虽然我很想知道答案,但更重要的是,我想知道今后如何做类似的事情,因为我真的找不到任何关于此类查询的信息,因为自连接示例只是演示了一个单独的自连接,没有什么更复杂的

任何帮助都将不胜感激

Ps这是在SQLite中运行的

试试看

select h1.name, h1.grade, h2.name, h2.grade from highschooler h1
join likes l on (h1.id = l.id1)
join highschooler h2 on (l.id2 = h2.id)
where h2.grade <= h1.grade-2

如果出现任何问题,请告诉我:

尝试下面的查询

SELECT h1.name, h1.grade, h2.name, h2.grade 
FROM highschooler h1 
  INNER JOIN likes l ON h1.id=l.id1
  INNER JOIN  highschooler h2 ON h2.id=l.id2
WHERE id1 !=id2 AND h1.grade>h2.grade+2 

在发布这篇文章后不到10分钟,我就明白了,但在一些内部连接上搞砸了。我已经为此工作了一天了: 选择h1.name、h1.grade、h2.name、h2.grade 来自高中生h1 内部联接类似于h1.id=l.id1和id1id2上的l 内部连接高中生h2在h2上。id=id2
其中h1.grade>=h2.grade+2

返回一个空集,但我算出了。非常感谢。我在发帖后不久就发现了这一点,但我的想法真的很相似!非常感谢你。
SELECT h1.name, h1.grade, h2.name, h2.grade 
FROM highschooler h1 
  INNER JOIN likes l ON h1.id=l.id1
  INNER JOIN  highschooler h2 ON h2.id=l.id2
WHERE id1 !=id2 AND h1.grade>h2.grade+2