1

友達とのつながりが2回以上あるメンバーを見つけるためのスクリプトが必要です。そうすれば、ウェブサイトに友達が2回以上表示されなくなります。

MemberConnectionテーブルは次のとおりです。

+----------------------+------------+----------------+
|  MemberConnectionID  |  MemberID  |  ConnMemberID  |
+----------------------+------------+----------------+
|  25                  |  33        | 43             |
|  26                  |  43        | 33             |
|  27                  |  13        | 143            |
|  28                  |  143       | 13             |
|  29                  |  33        | 43             |
+----------------------+------------+----------------+

ご覧のとおり、行25と29は同一であり、削除できるようにこれらの重複を見つける必要があります。

このためのスクリプトを作成するにはどうすればよいですか?

誰もが提供できる助けをいただければ幸いです。

よろしくお願いします

ネオジャキー

4

4 に答える 4

3

1つの接続を残したい場合は、これを試してください。

これを使用して接続を選択します。

;WITH CTE
AS
(
   SELECT
      MemberConnectionID, 
      ROW_NUMBER() OVER (PARTITION BY MemberID, ConnMemberID ORDER BY MemberConnectionID) RN
   FROM MemberConnection 
)
SELECT 
      MemberConnectionID
FROM CTE
WHERE RN > 1

または、これを使用してテーブルから削除します。

;WITH CTE
AS
(
   SELECT
      ROW_NUMBER() OVER (PARTITION BY MemberID, ConnMemberID ORDER BY MemberConnectionID) RN
   FROM MemberConnection 
)
DELETE
FROM CTE
WHERE RN > 1
于 2013-02-01T15:56:56.627 に答える
0

これをテストとして使用する:

DECLARE @Table AS TABLE
    (
      MemberConnectionID INT ,
      MemberID INT ,
      ConMemberID INT
    )

INSERT  INTO @Table
        SELECT  1 ,
                2 ,
                3
INSERT  INTO @Table
        SELECT  2 ,
                3 ,
                4
INSERT  INTO @Table
        SELECT  3 ,
                2 ,
                3

メンバー接続の発生を選択します

SELECT    COUNT(MemberConnectionID) AS Occurence ,
          MemberID ,
          ConMemberID
FROM      @Table
GROUP BY  MemberID ,
          ConMemberID

ステートメントを削除

DELETE  FROM @Table
FROM    @Table t
        INNER JOIN ( SELECT MemberID ,
                            ConMemberID
                     FROM   ( SELECT    COUNT(MemberConnectionID) AS Occurence ,
                                        MemberID ,
                                        ConMemberID
                              FROM      @Table
                              GROUP BY  MemberID ,
                                        ConMemberID
                            ) t2
                     WHERE  t2.Occurence > 1
                   ) t3 ON t3.MemberID = T.MemberID
                           AND t3.ConMemberID = t.ConMemberID
于 2013-02-01T16:06:25.527 に答える
0

私はいつもこの小さなクエリを使用します(あなたのテーブルに合うように変更されました)。

Delete MemberConnection
from MemberConnection
join
(select max(MemberConnectionId)as CountIt, MemberId, ConnMemberId
    from #MemberConnection
    group by MemberId, ConnMemberId
    having count(1) > 1
) as derived
on MemberConnection.MemberId = derived.MemberId
and MemberConnection.ConnMemberId = derived.ConnMemberId
and CountIt > MemberConnectionId
于 2013-02-01T16:07:05.660 に答える
0

あなたは次のようなことをすることができます:

SELECT * FROM 
(SELECT MemberID,ConnMemberID  ,count( MemberID,ConnMemberID ) as c FROM MemberConnection group by MemberID,ConnMemberID ) x 
WHERE x.c >1

これにより、繰り返されるすべての行が表示されます。

于 2013-02-01T15:56:25.930 に答える