1
I가 Event
이벤트 소스 중 하나가 널이 될 수있는 다른 소스 에서 이벤트에 대한 정보를 포함 테이블COALESCE 대 OR 조건
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
)
보기를 만들고 싶지만 무엇이 있는지 잘 모르겠습니다. 가장 좋은 방법은 사용 : OR condition
대 coalesce
을 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
다음과 같이 이벤트와 장소 사이에 동일한 스키마가있는 두 개의 개별 이벤트 소스 테이블이 의심스러워 보입니다. 각 이벤트에 대해 두 개의 (null 가능) 이벤트 소스 ID가 있습니다. 'Events','EventSources','Event_EventSources' 및'Venues' 테이블을 갖는 것이 더 합리적이지 않습니까? (현재) 두 가지 유형의 이벤트 소스를 구별 할 필요가 있고 주어진 이벤트에 대해 두 개 이상의 이벤트 소스를 허용하지 않도록 'Event_EventSources' 테이블을 제한 할 수 있다면'EventSourcesType'을'EventSources'에 추가 할 수 있습니다. – HABO