基于的友谊表中的SQL插入值

基于的友谊表中的SQL插入值,sql,Sql,我正在上一门数据库课程,我被其中一个问题困住了。“对于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 &

我正在上一门数据库课程,我被其中一个问题困住了。“对于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
模式在这里

我想知道是否有人能给我一些关于如何进行的提示。
谢谢。

首先,我不认为既有朋友又有喜欢的桌子有什么意义


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

首先,我不认为同时拥有FRIEND和LIKES表格有什么意义


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

我想你已经有了基本的概念

我会这样做:

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

我想你已经有了基本的概念

我会这样做:

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
我认为可能是:

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)
我认为可能是:

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)

只是提示-您应该指定要在朋友表中插入的列。只是提示-您应该指定要在朋友表中插入的列。这不是答案;而Friend表有两个ID列。显然Friend表包含相互的友谊,而LIKES表不是对等的,我的意思是A可以喜欢某人,但某人不一定喜欢A。这是否意味着如果A是B的朋友,B是C的朋友,A喜欢C但C不喜欢A,那么A不能和C做朋友吗?这不是答案;而Friend表有两个ID列。显然Friend表包含相互的友谊,而LIKES表不是对等的,我的意思是A可以喜欢某人,但某人不一定喜欢A。这是否意味着如果A是B的朋友,B是C的朋友,A喜欢C但C不喜欢A,那么A不能与C成为朋友?这个问题要求建立新的友谊,所以你应该检查记录是否已经存在。谢谢Marlin,这很有效。但正如CL所指出的,我可以看出我需要消除重复的内容。当然,答案必须只包含新的友谊。帮助?谢谢你们的意见。我用except SELECT*FROM friend过滤掉了重复的记录,现在没事了。是的,我想在我去午餐的路上排除现有记录。我突然想到,朋友表的第三个连接就是为了这个。很高兴你解决了这个问题。这个问题要求建立新的友谊,所以你应该检查一下记录是否已经存在。谢谢马林,这很有效。但正如CL所指出的,我可以看出我需要消除重复的内容。当然,答案必须只包含新的友谊。帮助?谢谢你们的意见。我用except SELECT*FROM friend过滤掉了重复的记录,现在没事了。是的,我想在我去午餐的路上排除现有记录。我突然想到,朋友表的第三个连接就是为了这个。很高兴你解决了。