두 개의 테이블이 있습니다. 하나는 Objects
이고 다른 하나는 각 개체에 대해 Settings
입니다. Objects
테이블의 모든 행에 Settings
테이블에 해당 행이있는 것은 아닙니다. "기타"오브젝트에 사용될 것으로 가정되는 Settings
테이블에 특수 행이 있습니다."기타"행에 가입하는 방법
Objects
과 Settings
사이에 조인을 만들면 어떻게 하나 또는 "기타"설정이있는 경우 주어진 설정을 얻을 수 있습니까?
예를 들어 다음 스크립트를 고려 :
CREATE TABLE #Objects (Code nvarchar(20) not null);
CREATE TABLE #Settings (Code nvarchar(20) not null, Value int not null);
INSERT INTO #Objects
VALUES
('A'),
('B'),
('D')
INSERT INTO #Settings
VALUES
('A', 1),
('B', 2),
('C', 3),
('Other', 4)
SELECT
#Objects.Code,
#Settings.Value
FROM
#Objects
JOIN #Settings
ON #Objects.Code = #Settings.Code
OR #Settings.Code = 'Other'
DROP TABLE #Settings, #Objects
나는이 얻을 꿔 다음을 사용
Code | Value
----- | -----
A | 1
A | 4
B | 2
B | 4
D | 4
아래와 같이 #Settings 테이블과 가입이 CTE를 사용하지 나는 exe를보고 싶다. 지금까지의 네 가지 답변 각각에 대한 합리적인 계획과 합리적인 크기의 색인 된 테이블의 실제 데이터에 대한 계획. 샘플 데이터의 경우 모든 답변에 대해 동일하거나 유사한 계획을 제공하며 차이가 너무 작아 측정 할 수 없습니다. –
이제 다섯 가지 답변 : :) 그러나 나는 계획을 보지 않고 그 중 누구에게나 투표하는 것을 주저합니다. –
@JoelCoehoorn 슬프게도 내 성능 요구 사항이 엄격하지는 않습니다 ('1000 개 정도의 오브젝트에서 30 분 이내에 실행됩니다.),하지만 개발 예산은 ('아직 안 끝났습니까? 왜 안 했습니까? '). 따라서 큰 데이터에 대한 쿼리 계획은 다른 날을 기다려야합니다. 나는 분석을하는 것이 좋을 것이라고 동의한다. –