2016-08-13 5 views
1

Ich habe Event TischCOALESCE vs OR Bedingung für JOIN (SQL)

TABLE Event(
EventId [int] IDENTITY(1,1) NOT NULL, 
EventSource1Id [int] NULL, 
EventSource2Id [int] NULL 
) 

die Informationen über Ereignisse aus verschiedenen Quellen enthält, in denen einer der Ereignisquellen können

TABLE EventSource1(
Id [int] IDENTITY(1,1) NOT NULL, 
Name [nvarchar](50) NULL, 
VenueId [int] NOT NULL 
) 

und

null sein
TABLE EventSource2(
Id [int] IDENTITY(1,1) NOT NULL, 
Name [nvarchar](50) NULL, 
VenueId [int] NOT NULL 
) 

TABLE Venue(
Id [int] IDENTITY(1,1) NOT NULL, 
TimeZone [nvarchar](100) NOT NULL 
) 

Ich würde gerne erstellen, aber ich bin mir nicht sicher, was ist die beste Art und Weise zu nutzen: coalesce vs OR condition für JOIN

Erste Option:

SELECT 
ev.[Id] AS 'Id', 
ven.[Id] AS 'VenueId' 
FROM Event ev 
LEFT JOIN EventSource1 source1 ON source1.[Id] = ev.EventSource1Id 
LEFT JOIN EventSource2 source1 ON source2.[Id] = ev.EventSource2Id 
LEFT JOIN Venue AS ven ON ven.[Id] = source1.[VenueId] OR v.[Id] = source2.[VenueId] 

Zweite Option:

SELECT 
ev.[Id] AS 'Id', 
ven.[Id] AS 'VenueId' 
FROM Event ev 
LEFT JOIN EventSource1 source1 ON source1.[Id] = ev.EventSource1Id 
LEFT JOIN EventSource2 source1 ON source2.[Id] = ev.EventSource2Id 
LEFT JOIN Venue AS ven ON ven.[Id] = COALESCE(source1.[Id], source2.[Id]) 

Könnten Sie mir bitte helfen?

+2

Verwenden Sie den Ausführungsplan, um zu sehen, was am besten wäre – Fredou

+0

Vergessen Sie nicht, den richtigen Index zu setzen – Fredou

+0

Beiseite: Zwei separate Ereignisquellentabellen mit identischen Schemas zwischen Ereignissen und Veranstaltungsorten sitzt verdächtig. Zwei (nullfähige) Ereignisquellen-IDs für jedes Ereignis Wäre es nicht sinnvoller, Tabellen für "Events", "EventSources", "Event_EventSources" und "Venues" zu haben? Sie könnten 'EventSources' einen' EventSourceType' hinzufügen, wenn Sie zwischen (momentan) zwei Arten von Ereignisquellen unterscheiden müssen, und Sie könnten die 'Event_EventSources'Tabelle so einschränken, dass mehr als zwei Ereignisquellen für ein bestimmtes Ereignis nicht zulässig sind. – HABO

Antwort

0

Die COALESCE liefert normalerweise einen besseren Abfrageplan. Sie sollten mit Ihren Daten testen.