2013-02-11 87 views
-2

對於A是B的朋友,B是C的朋友的所有情況,爲A和C兩個對添加新的友誼。不要添加重複的友誼,已經存在的友誼或與自己的友誼。「SQL社交網絡修改練習」(斯坦福DB公開課)

我嘗試是如下,這就造成了一個語法錯誤:

insert into Friend 
    select F1.ID1, F2.ID2 
    from Friend F1, Friend F2 
    where F1.ID2 = F2.ID1 and F1.ID1 <> F2.ID2 and (F1.ID1, F2.ID2) not in (
    select * from Friend 
); 

預期查詢結果應該是(這不能從上述查詢來製造):

1025 John 12 2 
1101 Haley 10 3 
1247 Alexis 11 7 
1304 Jordan 12 8 
1316 Austin 11 6 
1381 Tiffany 9 6 
1468 Kris 10 6 
1501 Jessica 11 7 
1510 Jordan 9 5 
1641 Brittan 10 3 
1661 Logan 12 4 
1689 Gabriel 9 8 
1709 Cassand 9 7 
1782 Andrew 10 10 
1911 Gabriel 11 5 
1934 Kyle 12 7 

數據庫架構和數據是:

Highschooler 
ID  name  grade 
1510 Jordan  9 
1689 Gabriel 9 
1381 Tiffany 9 
1709 Cassandra 9 
1101 Haley  10 
1782 Andrew  10 
1468 Kris  10 
1641 Brittany 10 
1247 Alexis  11 
1316 Austin  11 
1911 Gabriel 11 
1501 Jessica 11 
1304 Jordan  12 
1025 John  12 
1934 Kyle  12 
1661 Logan  12 

Friend 
ID1  ID2 
1510 1381 
1510 1689 
1689 1709 
1381 1247 
1709 1247 
1689 1782 
1782 1468 
1782 1316 
1782 1304 
1468 1101 
1468 1641 
1101 1641 
1247 1911 
1247 1501 
1911 1501 
1501 1934 
1316 1934 
1934 1304 
1304 1661 
1661 1025 
1381 1510 
1689 1510 
1709 1689 
1247 1381 
1247 1709 
1782 1689 
1468 1782 
1316 1782 
1304 1782 
1101 1468 
1641 1468 
1641 1101 
1911 1247 
1501 1247 
1501 1911 
1934 1501 
1934 1316 
1304 1934 
1661 1304 
1025 1661 

Likes 
ID1  ID2 
1689 1709 
1709 1689 
1782 1709 
1911 1247 
1247 1468 
1641 1468 
1316 1304 
1501 1934 
1934 1501 
1025 1101 
+1

發佈架構和確切的錯誤消息。理想情況下,創建一個[sqlfiddle](http://sqlfiddle.com),其中包括數據 – Bohemian 2013-02-11 04:03:03

+0

Hi @Bohemian,架構已在原始文章中列出。錯誤消息是「SQLite異常:1,靠近」,「:語法錯誤」。 sqlfiddle很酷!這篇文章的sqlfiddle是[here](http://sqlfiddle.com/#!5/6fddf/182) – dwstu 2013-02-11 16:49:58

回答

4

你能做到這樣,

insert into Friend 
select distinct F1.ID1, F2.ID2 
from Friend F1, Friend F2 
where F1.ID2 = F2.ID1 and F1.ID1<>F2.ID2 
     and F1.ID1 not in (select F3.ID1 from Friend F3 where F3.ID2=F2.ID2);