2016-08-24 62 views
2

我是Sql的新手,这可能解释了为什么我无法弄清楚这一点。在外部select语句中未使用子查询中使用附加表的自加入

我有2个理论社交网络表。一个名字叫'highschooler',一个叫'喜欢'。 'Highschooler'有像id(PK),姓名和成绩的信息,而'likes'有id1和id2,它们简单地表明来自高级学生的哪个id'相互'喜欢',id1'喜欢'id2。喜欢不一定是相互的。

查询:对于每个喜欢比自己年轻2个或更多年级的人的学生,请返回该学生的姓名和年级,以及他们喜欢的学生的姓名和年级。

此:

select h1.name, h1.grade, h2.name, h2.grade 
from highschooler h1 inner join highschooler h2 
where h1.id in (select id1 from likes where h1.id=id1 and id1<>id2 and h1.grade>h2.grade+2); 

没有返回正确的结果。事实上,正确的结果甚至不在我从这个查询中得到的结果中。我仍然试图围绕“加入”,这是我觉得在这里很有用,但我不知道如何在自加入中工作。

尽管我很想知道答案,但我还是希望知道如何在未来做这样的事情,因为我无法真正找到任何有关此类查询的信息,例如:自我加入的例子只是展示了一个单独的自我加入,并没有更复杂的。

任何帮助,将不胜感激。

诗篇这在SQLite的中运行

回答

1

试试这个

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 

让我知道,如果有什么失败:)

+0

内部加入highschooler h2在h2.id = id2 发布后不久,我发现了它,但我的确非常相似!非常感谢。 –

0

与下面的查询

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 
+0

返回一个空集,但我想通了。谢谢! –

0

尝试发帖之后不是10分钟,我想通了一些内部连接。我一直在为这样的一天工作: select h1.name,h1.grade,h2.name,h2.grade from highschooler h1 inner join like l on h1.id = l.id1 and id1 <> id2 h2id = id2 其中h1.grade> = h2.grade + 2

相关问题