提取反转的重复值sql

时间:2016-12-04 16:52:44

标签: sql sql-server

我有两张桌子:

  • 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

如果有人可以帮助我,那就太好了!提前谢谢。

2 个答案:

答案 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

这两项检查将确保友谊对是唯一的。注意:您需要注意插入数据的方式。