基於

2013-02-06 61 views
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

我不知道是否有人可以給我如何進行一些提示。 謝謝。

+0

只是一個提示 - 你應該指定要插入的列'朋友'表。 – Bridge

回答

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 
+0

問題要求*新*友誼,所以你應該檢查記錄不存在。 –

+0

謝謝馬林,這個工程。但正如CL指出的那樣,我可以看到我需要擺脫重複。當然,答案只能包含新的友誼。幫幫我? – NinaC

+0

感謝您的輸入。我用「除了SELECT * FROM friend」過濾了重複項,現在沒關係。 – NinaC

0

首先,我沒有看到有FRIEND和LIKES表的觀點。

如果友誼是由兩個喜歡彼此的高級學習者表示而不是一個具有兩個ID列的表就足夠了。

+0

這不是一個答案;和'Friend'表* *有兩個ID列。 –

+0

好吧,顯然FRIEND表包含共同的友誼,而LIKES表不是互惠的,我的意思是說人A可以喜歡某人,但有人不一定喜歡人A. – NinaC

+0

這是否意味着如果A是B的朋友, B是C和A的朋友喜歡C但是C不喜歡A,那麼A不能和C一起成爲朋友? – Lupuss

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) 
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