가입 전화 번호는 서비스 유형에 따라 침대 또는 좌석을 나타내는 ServiceType.serviceTypeId와 관련된 경우에만 의미가 있습니다.SQL 자기 나는 네 개의 테이블이 쿼리
내가 작성 및 저장 프로 시저에서 임시 테이블을 폐기하는 것은있을 수 가난한 해결책이 거의 확실 해요 facilitatorName, 침대, 좌석 :
은 내가 nammely 3 열을 반환 할 쿼리를 작성해야 미래의 확장성에 대한 부정적인 파급 효과 등이 있으며 솔루션에는 Service 테이블에 대한 자체 조인이 포함됩니다.
지금까지 내 쿼리는 다음과 같이 읽지 만 행을 반환하지 않습니다. 나는 무엇을 놓치고 있습니까?
SELECT f.facilitatorName,(SUM(ts1.capacity)) as Beds,(SUM(ts2.capacity)) as Seats
FROM dbo.Facilitator as f,
dbo.TestService as ts1,
dbo.TestService as ts2,
dbo.ServiceFacilitator as sf
WHERE f.facilitatorId = sf.facilitatorId AND
(sf.serviceId = ts1.serviceId or
sf.serviceId = ts2.serviceId) and
ts1.serviceId = ts2.serviceId and
ts1.serviceTypeId = '1' and -- type hotel
ts2.serviceTypeId = '2' -- type conference centre
GROUP BY f.facilitatorName
과 같은 두 가지로 쿼리를 깨는 것은 정확한 침대에 대한 결과 및 좌석 반환합니다
SELECT f.facilitatorName,(SUM(ts1.capacity)) as Beds
FROM dbo.Facilitator as f,
dbo.TestService as ts1,
dbo.ServiceFacilitator as sf
WHERE f.facilitatorId = sf.facilitatorId AND
sf.serviceId = ts1.serviceId and
ts1.serviceTypeId = '1'
GROUP BY f.facilitatorName
SELECT f.facilitatorName,(SUM(ts2.capacity)) as Seats
FROM dbo.Facilitator as f,
dbo.TestService as ts2,
dbo.ServiceFacilitator as sf
WHERE f.facilitatorId = sf.facilitatorId AND
sf.serviceId = ts2.serviceId and
ts2.serviceTypeId = '2'
GROUP BY f.facilitatorName
감사합니다 ..
[나란히 (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins .aspx)는 아마 읽을만한 가치가 있습니다. 사용중인 JOIN 구문 (ANSI 89)은 20 년이 넘었으며 ANSI 92에서 명시 적 조인으로 바뀌 었습니다. – GarethD
링크 엔터티 'ServiceFacilitator'는 각 서비스가 여러 Facilitator를 가질 수 있음을 의미합니다. 서비스에 여러 Facilitator가있는 경우 용량 분할이 필요합니까? –
@ 마크 ... 정말 잘 모름; 이 마지막 순간에 막 들어 왔어. 아직 모든 일에 노출되어 있어야합니다 ... 시간을내어 주셔서 감사합니다 ... –