1
我Event
表COALESCE VS OR條件JOIN(SQL)
TABLE Event(
EventId [int] IDENTITY(1,1) NOT NULL,
EventSource1Id [int] NULL,
EventSource2Id [int] NULL
)
包含與來自不同來源的 事件,其中的事件源可以爲空信息
TABLE EventSource1(
Id [int] IDENTITY(1,1) NOT NULL,
Name [nvarchar](50) NULL,
VenueId [int] NOT NULL
)
和
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
)
我想創建視圖,但我不確定是什麼用最好的方式:3210 VS OR condition
爲JOIN
第一種選擇:
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]
第二個選項:
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])
你能幫助我嗎?
使用執行計劃來看看什麼是最好的 – Fredou
不要忘記也要放正確的索引 – Fredou
另外:兩個事件和場地之間有相同模式的獨立事件源表看起來很可疑。每個事件有兩個(可爲空)事件源ID。擁有'Events','EventSources','Event_EventSources'和'Venues'的表是否更有意義?如果您需要區分(目前)兩種類型的事件源,並且可以限制「Event_EventSources」表,以禁止任何給定事件使用兩個以上的事件源,則可以將「EventSourceType」添加到「EventSources」。 – HABO