1
私は、イベントソースの一つが対COALESCE OR条件(SQL)
TABLE EventSource1(
Id [int] IDENTITY(1,1) NOT NULL,
Name [nvarchar](50) NULL,
VenueId [int] NOT NULL
)
と
nullにすることができ 異なるソースからのイベントに関する情報が含まれていEvent
テーブル
TABLE Event(
EventId [int] IDENTITY(1,1) NOT NULL,
EventSource1Id [int] NULL,
EventSource2Id [int] 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
)
私はビューを作成したいと思いますが、わかりません最良の方法は、使用する:OR condition
対3210を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
別名:イベントと会場の間に同じスキーマを持つ2つの別々のイベントソーステーブルが疑わしいようです。イベントごとに2つの(null可能な)イベントソースID。 'Events'、' EventSources'、 'Event_EventSources'、' Venues'のテーブルを持つ方がいいでしょうか? (現在)2つのタイプのイベントソースを区別する必要がある場合、 'EventSourceType'を' EventSources'に追加することができます。また、 'Event_EventSources'テーブルを制限して、任意のイベントに対して3つ以上のイベントソースを許可しないようにできます。 – HABO