我正在做一些SQL练习,其要求如下:
对于学生A喜欢学生B的每种情况,但我们没有关于B喜欢的人的信息(也就是说,B在Likes表中没有出现为ID1),请返回A和B的姓名和成绩。
我有关于架构的参考:https://lagunita.stanford.edu/c4x/DB/SQL/asset/socialdata.html
我的查询如下:
select
h1.name, h1.grade, h2.name, h2.grade
from
highschooler h1, highschooler h2, likes l1, likes l2
where
h1.id in (select id1
from l1
where not exists (select id2 from l1 where id2 = id1))
and h2.id in (select id2
from l2
where not exists (select id2 from l2 where id2 = id1))
SQL是在html服务器中构建的,它一直告诉我他们无法找到列l1。我的代码中是否存在任何逻辑错误,有人可以告诉它有什么问题吗?谢谢!
答案 0 :(得分:1)
你应该更好地使用连接...用这样的东西拍摄
Select HS1.ID, HS1.Name, HS1.grade,
LI1.ID1, LI1.ID2,
HS2.ID, HS2.Name, HS2.Grade
from Highschooler HS1
join Likes LI1 on HS1.ID = LI1.ID1
JOIN Highschooler HS2 on LI1.ID2 = HS2.id
LEFT JOIN Likes LI2 on HS2.ID = LI2.ID1
where LI2.ID1 IS NULL
基本上你只是加入这些表格,最后两行会给你你所要求的......“但是我们没有关于B喜欢的人的信息(也就是说,B在Likes表中没有显示为ID1)” ...看看联接并修复此查询...我只是看了一眼问题,指出你正确的方向