1
SELECT DISTINCT
     rev1.name,
     rev2.name

FROM reviewer rev1,
     reviewer rev2,

    (SELECT r1.rid AS r1id,
            r2.rid AS r2id
       FROM rating r1,
            rating r2
      WHERE r1.mID = r2.mID
        AND r1.rid < r2.rID
   ) AS raters

WHERE rev1.rid = raters.r1id
  AND rev2.rid = raters.r2id

ORDER BY rev1.name DESC;

このsqliteコードは、次のペアを返します。

Brittany Harris   Chris Jackson
Chris Jackson     Ashley White
Daniel Lewis      Elizabeth Thomas
Elizabeth Thomas  James Cameron
Sarah Martinez    Mike Anderson

ペアの名前は正しいですが、それらのいくつかは逆に表示される必要があります。つまり、結果は次のようになります。

Ashley White      Chris Jackson
Brittany Harris   Chris Jackson
Daniel Lewis      Elizabeth Thomas
Elizabeth Thomas  James Cameron
Mike Anderson     Sarah Martinez

誰かが私が間違っていることを指摘してくれたらとてもありがたいです。提供された助けを事前に感謝します。

4

1 に答える 1

1

内側の選択内で < を <> に変更すると、各ペアが 2 回取得され、外側の選択に名前の制約が追加されます (### HERE を探します)。また、DESCではなくASCが必要だと思います

SELECT DISTINCT
     rev1.name,
     rev2.name

FROM reviewer rev1,
     reviewer rev2,

    (SELECT r1.rid AS r1id,
            r2.rid AS r2id
       FROM rating r1,
            rating r2
      WHERE r1.mID = r2.mID
        AND r1.rid <> r2.rID  -- HERE - give you each pair twice
   ) AS raters

WHERE rev1.rid = raters.r1id
  AND rev2.rid = raters.r2id
  AND rev1.name < rev2.name  -- HERE - will remove duplicate pairs
  ORDER BY ASC
于 2013-03-15T07:44:30.767 に答える