2016-08-24 3 views
2

私はSqlを初めて使用しました。外部選択ステートメントで選択されていないサブクエリ内の追加テーブルを使用した自己結合

私は理論的なソーシャルネットワークから2つのテーブルを持っています。 1つは「高校生」、1つは「好き」という名前です。 「高校生」にはID(PK)、名前、グレードなどの情報がありますが、「好き」にはid1とid2があり、高校生のIDが「好き」で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); 

は正しい結果を返していません。実際、正しい結果はこのクエリから得られた結果でさえありません。私はまだここで役に立つと思う "参加する"の周りに私の頭を包み込むことを試みているが、私はそれが自己参加の仕組みを知らない。

私は答えを知りたいと思っていますが、これ以上のものは何もありません。今後このようなことをする方法を知りたいのです。自己結合の例は単なる自己結合を実証するだけであり、何も複雑ではありません。

ご協力いただければ幸いです。

Psがこれは

答えて

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

私はポストした後もそれを理解することができましたが、私のものは本当に似ています!どうもありがとうございます。 –

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

で試してみてください教えて試してみてのSQLiteで実行されていますこれを投稿してから10分も経たないうちに、私はそれを理解しましたが、いくつかの内部結合で悩まされました。私はこのような日のように作業しています: select h1.name、h1.grade、h2.name、h2.grade highschoolerからh1 h1.id = l.id1とid1に内部結合が好き<> id2 h2.id = id2の内面の高校生h2 ここでh1.grade> = h2.grade + 2

関連する問題