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 seinTABLE 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?
Verwenden Sie den Ausführungsplan, um zu sehen, was am besten wäre – Fredou
Vergessen Sie nicht, den richtigen Index zu setzen – Fredou
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