我有两张桌子:
Likes
(IDPerfilA,IDPerfilB,Data)Amizade
(IDPerfilA,IDPerfilB,Data)* Amizade =英语朋友。
我的表喜欢上传了许多喜欢,其约束不允许IDPerfilA喜欢相同的IDperfilB(EX:ID为4的用户不喜欢ID为4的用户)。
现在,我想使用以下ID上传我的朋友表:
如果存在于喜欢的表中,用户4喜欢8和8喜欢4,那么这是一种友谊,所以他们去找朋友并从喜欢中删除。
我尝试了以下内容,但我的桌面朋友反复重复值(例如:4是8和8的朋友是4的朋友)
INSERT INTO AMIZADE (IDPERFILA,
IDPERFILB,
DATA)
SELECT a.IDPERFILA, a.IDPERFILB, a.DATA
FROM LIKES as a, LIKES as b
WHERE (a.IDPERFILB = b.IDPERFILA AND a.IDPERFILA = b.IDPERFILB)
我使用以下代码删除喜欢的朋友:
DELETE LIKES
from
LIKES as l inner join amizade as a
on a.IDPERFILA = l.IDPERFILA
and a.IDPERFILB = l.IDPERFILB
and a.DATA = l.DATA
如果有人可以帮助我,那就太好了!提前谢谢。
答案 0 :(得分:0)
这会有用吗?
INSERT INTO AMIZADE (IDPERFILA,
IDPERFILB,
DATA)
SELECT DISTINCT CASE WHEN (a.IDPERFILA > a.IDPERFILB) THEN a.IDPERFILA
ELSE a.IDPERFILB
END
, CASE WHEN (a.IDPERFILA <= a.IDPERFILB) THEN a.IDPERFILB
ELSE a.IDPERFILA
END
, a.DATA
FROM LIKES as a, LIKES as b
WHERE (a.IDPERFILB = b.IDPERFILA AND a.IDPERFILA = b.IDPERFILB)
答案 1 :(得分:0)
我猜你想要对(4,8)只出现在朋友表中一次。我会去:
5
如果您想在INSERT INTO AMIZADE (IDPERFILA, IDPERFILB, DATA)
SELECT l.IDPERFILA, l.IDPERFILB, l.DATA
FROM LIKES l
WHERE EXISTS (SELECT 1
FROM LIKES l2
WHERE l2.IDPERFILA = l.IDPERFILB AND l2.IDPERFILB = l.IDPERFILA
) AND
l.IDPERFILA < l2.IDPERFILB;
表中使用两个对,则可以删除最后一个条件。
您可能还希望强制执行一对给定的对只进入amizade
表。如果是这样,您可以使用唯一索引和检查约束来执行此操作:
amizade
这两项检查将确保友谊对是唯一的。注意:您需要注意插入数据的方式。