Tworzę zapytanie SQL z instrukcją WHERE CASE WHEN
. Robię coś złego i dostaję błąd.WHERE CASE KIEDY oświadczenie z Exists
My SQL jest jak
DECLARE @AreaId INT = 2
DECLARE @Areas Table(AreaId int)
INSERT INTO @Areas SELECT AreaId
FROM AreaMaster
WHERE CityZoneId IN (SELECT CityZoneId FROM AreaMaster WHERE AreaId = @AreaID)
SELECT *
FROM dbo.CompanyMaster
WHERE AreaId IN
(CASE WHEN EXISTS (SELECT BusinessId
FROM dbo.AreaSubscription
WHERE AreaSubscription.BusinessId = CompanyMaster.BusinessId)
THEN @AreaId
ELSE (SELECT [@Areas].AreaId FROM @Areas)
END)
otrzymuję błąd jak
Msg 512, Level 16, State 1, wiersz 11
Podkwerenda zwrócone więcej niż 1 wartość. Nie jest to dozwolone, gdy podzapytanie jest następujące: =,! =, <, < =,>,> = lub gdy podzapytanie jest używane jako wyrażenie .
Pomóż z powodzeniem uruchomić zapytanie. Moja logika polega na sprawdzeniu warunkowego AreaId
w (instrukcja) dla każdego wiersza.
Chcę zaznaczyć wiersz tylko wtedy, gdy
- Firma posiada wpis subskrypcji do
AreaSubscription
dla określonego obszaru przeszła przez@AreaId
- tabeli
AreaSubscription
nie posiada wpisu subskrypcji następnie ocenićAreaId
w(SELECT [@Areas].AreaId FROM @Areas)
'SELECT [@Areas] .AreaId FROM @ Areas' to jest to, że zwraca wiele wartości? – Nithesh
Tak, zwraca listę obszarów, które wcześniej utworzyłem w zapytaniu. –
Myślę, że wyjątek podkwerendy jest tam. A co z wynikiem '(SELECT BusinessId FROM dbo.AreaSubscription WHERE AreaSubscription.BusinessId = CompanyMaster.BusinessId)'? wielokrotność? – Nithesh