2016-12-04 18 views
1

をSQL 。エキス反転重複値は、私は2つのテーブルを持っている

私のテーブルのお気に入りは、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

これは機能しますか?

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) 
0

ペア(4,8)を友人テーブルに1回だけ表示したいと思っています。私は行く:

amizadeテーブルで両方のペアが必要な場合は、最後の条件を削除することができます。

与えられたペアがamizadeテーブルに1回だけ入るように強制することもできます。その場合は、一意のインデックスとチェック制約でこれを行うことができます。

alter table amizade constraint chk_amizade_idperfilA_idperfilB 
    check (idperfilA < idperfilB); 

alter table amizade constraint unq_amizade_idperfilA_idperfilB 
    unique (idperfilA, idperilB); 

この2つのチェックは、友情ペアが一意であることを確認します。注:データの挿入方法に注意する必要があります。

0
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) 
**and (a.IDPrfila > a.IDPerfilb)** 

de **の中にステートメントを追加して作業しました。ヒントありがとうございました

関連する問題