2012-12-22 19 views
0

我有以下模式和相關數據。在SQL Server 2008中獲取衝突事件查詢

-- Schema 
CREATE TABLE [PERSON] (
    [id] int NOT NULL, 
    [first_name] varchar(50) NOT NULL, 
    [last_name] varchar (50) NOT NULL 
    CONSTRAINT [PK__PERSON] PRIMARY KEY ([id]) 
) 
GO 

CREATE TABLE [EVENT] (
    [id] int NOT NULL, 
    [name] varchar(50) NOT NULL 
    CONSTRAINT [PK__EVENT] PRIMARY KEY ([id]) 
) 
GO 

CREATE TABLE [EVENT_PARTICIPANT] (
    [event_id] int NOT NULL, 
    [person_id] int NOT NULL 
    CONSTRAINT [PK__EVENT_PARTICIPANT] PRIMARY KEY ([event_id], [person_id]) 
) 
GO 

ALTER TABLE [EVENT_PARTICIPANT] ADD CONSTRAINT [FK__EVENT__EVENT_PARTICIPANT__event_id] 
    FOREIGN KEY ([event_id]) 
    REFERENCES [EVENT]([id]) 
GO 

ALTER TABLE [EVENT_PARTICIPANT] ADD CONSTRAINT [FK__PERSON__EVENT_PARTICIPANT__person_id] 
    FOREIGN KEY ([person_id]) 
    REFERENCES [PERSON]([id]) 
GO 

-- data 
INSERT INTO [PERSON] VALUES(1, 'Alpha', 'A') 
INSERT INTO [PERSON] VALUES(2, 'Bravo', 'B') 
INSERT INTO [PERSON] VALUES(3, 'Charlie', 'C') 
INSERT INTO [PERSON] VALUES(4, 'Delta', 'D') 
INSERT INTO [PERSON] VALUES(5, 'Echo', 'E') 
INSERT INTO [PERSON] VALUES(6, 'Foxtrot', 'F') 
INSERT INTO [PERSON] VALUES(7, 'Golf', 'G') 
INSERT INTO [PERSON] VALUES(8, 'Hotel', 'H') 
INSERT INTO [PERSON] VALUES(9, 'India', 'I') 
INSERT INTO [PERSON] VALUES(10, 'Juliet', 'J') 
GO 

INSERT INTO [EVENT] VALUES(1, 'Event A') 
INSERT INTO [EVENT] VALUES(2, 'Event B') 
INSERT INTO [EVENT] VALUES(3, 'Event C') 
INSERT INTO [EVENT] VALUES(4, 'Event D') 
INSERT INTO [EVENT] VALUES(5, 'Event E') 
INSERT INTO [EVENT] VALUES(6, 'Event F') 
INSERT INTO [EVENT] VALUES(7, 'Event G') 
INSERT INTO [EVENT] VALUES(8, 'Event H') 
INSERT INTO [EVENT] VALUES(9, 'Event I') 
INSERT INTO [EVENT] VALUES(10, 'Event J') 
GO 

INSERT INTO [EVENT_PARTICIPANT] VALUES(1,1) 
INSERT INTO [EVENT_PARTICIPANT] VALUES(1,2) 
INSERT INTO [EVENT_PARTICIPANT] VALUES(1,3) 
INSERT INTO [EVENT_PARTICIPANT] VALUES(2,4) 
INSERT INTO [EVENT_PARTICIPANT] VALUES(2,5) 
INSERT INTO [EVENT_PARTICIPANT] VALUES(2,6) 
INSERT INTO [EVENT_PARTICIPANT] VALUES(3,5) 
INSERT INTO [EVENT_PARTICIPANT] VALUES(3,6) 
INSERT INTO [EVENT_PARTICIPANT] VALUES(4,1) 
INSERT INTO [EVENT_PARTICIPANT] VALUES(4,4) 
INSERT INTO [EVENT_PARTICIPANT] VALUES(5,1) 
INSERT INTO [EVENT_PARTICIPANT] VALUES(6,7) 
INSERT INTO [EVENT_PARTICIPANT] VALUES(7,8) 
INSERT INTO [EVENT_PARTICIPANT] VALUES(8,9) 
GO 

我需要找到所有有匹配參與者的衝突事件,以便查詢返回與每個事件衝突的事件列表。匹配不一定是100%即使一個人匹配,也就是說事件彼此衝突。

我已經生成一個逗號分隔的活動參與者爲每個事件的列表,但奮力一點點與如何編寫高效的查詢來獲取衝突事件爲SQL Server 2008

謝謝!

+0

所以,這是確定的事件有多人。但是,如果一個人有超過1次事件,那就是衝突。正確?另外,您想要如何列出輸出? Event1,Event2?你需要說明誰有衝突嗎?如果一個人有3個衝突事件會怎樣? – ExactaBox

+0

你從未解釋過什麼是「衝突事件」。一個例子會很好。您的樣本數據的預期輸出會更好。請不要讓我們在黑暗中! – ErikE

回答

0

你可以試試這個查詢:

select distinct ep1.event_id,ep2.event_id from EVENT_PARTICIPANT ep1 inner join EVENT_PARTICIPANT ep2 on ep1.person_id=ep2.person_id where ep1.event_id <> ep2.event_id order by 1,2

+0

非常感謝!這樣一個簡單的查詢,我無法弄清楚。看起來我需要一個假期。 :P –