2015-09-18 53 views
0

我做了一些SQL的練習和要求如下問題關於B喜歡的人(即B在Like表中沒有出現ID1),返回A和B的姓名和成績。有關SQL鍛鍊我的SQL查詢(無法找到列)

而且我有一個關於模式的參考: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。我的代碼中是否有邏輯錯誤,並且有人可以告訴它有什麼問題嗎?謝謝!

+2

[踢壞的習慣:使用舊式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old -style-joins.aspx) - 舊式*逗號分隔符在ANSI - ** 92 ** SQL標準(**超過20年**之前)中,ted table * style的列表被替換爲* proper * ANSI'JOIN'語法,並且不鼓勵使用 –

+0

您的查詢很漂亮搞砸了......你的商業案例也不是很清楚..你能解釋一下嗎? –

+0

謝謝marc_s指出了壞習慣。我將避免使用逗號,並嘗試下次使用連接。 –

回答

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在Like表中不會顯示爲ID1)「......查看聯接並修復此查詢......我只是看一眼問題來指出您朝着正確的方向

+0

謝謝!我明白你的方向。 –