0

我正在上一门数据库课程,但我遇到了一个问题。“对于所有 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

首先,我看不出同时拥有 FRIEND 和 LIKES 表的意义。

如果友谊由两个互相喜欢的高中生代表,那么一张有两个 ID 列的表就足够了。

于 2013-02-06T16:04:09.777 回答
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 回答