2

私はいくつかのテーブルを持っています (太字は主キーを意味します):

Dancer( ダンサー名,性別, 年齢)

Dance(ダンサー名, dvd_id,曲名)

DVD( dvd_id, song_title, cost)

Song(ダンサー名, 曲名,ジャンル)

Launch(ダンサー名, dvd_id,年)

1 つまたは複数の DVD に歌が一緒に登場するダンサーのペアを選択し、各ペアを 1 回だけ印刷したいと考えています。

これは私が得ることができる限り近く、同じペアを 2 回出力しますが、それらの名前は異なる列に表示されます。

select distinct DANCER1.dancer_name, DANCER2.dancer_name, count(*) as count
  from Dancer DANCER1, Dancer DANCER2, Dance DANCE1, Dance DANCE2
 where DANCER1.dancer_name = DANCE1.dancer_name 
   and DANCER2.dancer_name = DANCE2.dancer_name 
   and DANCER1.dancer_name <> DANCER2.dancer_name
   and DANCE1.dvd_id = DANCE2.dvd_id
 group by DANCER1.dancer_name, DANCER2.dancer_name;

したがって、取得する代わりに

Tom Jon
Jon Tom
Bob Sam
Sam Bob

ただ欲しい

Tom Jon
Bob Sam
4

2 に答える 2

3

テストを からDANCER1.dancer_name <> DANCER2.dancer_nameに変更するとDANCER1.dancer_name < DANCER2.dancer_name、必要な結果が得られるはずです。

ただし、名前を Dance テーブルのキーとして使用しているため、Dancer テーブルに参加する必要はなく、クエリは次のように簡略化できます。

SELECT DANCE1.dancer_name, DANCE2.dancer_name, count(*) as count
FROM Dance DANCE1
INNER JOIN Dance DANCE2
ON DANCE1.dvd_id = DANCE2.dvd_id
WHERE DANCE1.dancer_name < DANCE2.dancer_name
GROUP by DANCE1.dancer_name, DANCE2.dancer_name
于 2013-02-14T08:24:05.810 に答える
0
declare @tmpTable table
(
    ID BIGINT IDENTITY(1,1),
    User1 BIGINT,
    User2 BIGINT
)

declare @tmpParticipants table
(
    Participant1 BIGINT,
    Participant2 BIGINT
)

insert into @tmpTable
Select distinct SendByID, SendToID
from InternalMessaging

declare @cnt bigint, @i bigint = 1, @user1 bigint, @user2 bigint

select @cnt = count(*) from @tmpTable

While(@i <= @cnt)
begin
        select @user1 = User1, @user2 = User2 from @tmpTable where ID = @i

        if not exists(select 1 from @tmpParticipants where Participant1 = @user1 and Participant2 = @user2)
        if not exists(select 1 from @tmpParticipants where Participant1 = @user2 and Participant2 = @user1)
        begin
                insert into @tmpParticipants
                select @user1, @user2
        end

        set @i = @i + 1
end

select * from @tmpParticipants

それは私のために働いた。問題の解決に役立つことを願っています。

于 2016-08-22T07:59:07.047 に答える