0

データベースのコースを受講していますが、質問の 1 つに行き詰まっています。「A が B と友達で、B が C と友達であるすべてのケースで、A と C のペアに新しい友情を追加します。」これは私が持っている限りです

INSERT INTO 
    friend
SELECT DISTINCT 
    f1.ID1, f2.ID1 
FROM 
    friend f1 
    JOIN friend f2 using (ID2), 
    friend 
WHERE 
    f1.ID1 <> f2.ID1 
AND friend.ID1 <> f1.ID1 
AND friend.ID2 <> f1.ID2

スキーマはここにあります http://www.sqlfiddle.com/#!5/cf8b5/23

どうすればよいか、どなたかヒントをいただけないでしょうか。ありがとう。

4

4 に答える 4

2

基本的なコンセプトはお持ちだと思います。

私は次のようにします:

INSERT INTO friend
(ID1, ID2)
SELECT DISTINCT f1.ID1, f2.ID2
FROM friend f1
  INNER JOIN f2
    ON f1.ID2 = f2.ID1
      AND f1.ID1 <> f2.ID1
      AND f1.ID2 <> f2.ID2
WHERE f1.ID1 <> f2.ID2
于 2013-02-06T16:08:07.957 に答える
1

私はそれがあるかもしれないと思います:

INSERT INTO friend
(ID1, ID2)
SELECT DISTINCT h.ID, f2.ID2
FROM Highschooler h 
inner join friend f1 on(h.ID=f1.ID1) 
inner join friend f2 on(f1.ID2=f2.ID1)
where h.ID <> f2.ID2
and not exists(select *
               from friend f3
               where f3.ID1=h.ID
               and f3.ID2 = f2.ID2)
于 2013-02-06T16:31:54.200 に答える
0
insert into friend
select f1.id1, f2.id2
from friend f1 join friend f2 on f1.id2 = f2.id1
where f1.id1 <> f2.id2
except
select * from friend
于 2015-10-09T18:35:54.720 に答える
0

まず第一に、FRIEND テーブルと LIKES テーブルの両方を持つ意味がわかりません。

友情がお互いを好きな 2 人の高校生で表される場合、2 つの ID 列を持つ 1 つのテーブルで十分です。

于 2013-02-06T16:04:09.777 に答える