Mam niektóre przykładowe dane, takie jak:Logic, by sprawdzić, czy dokładne identyfikatory są obecne w grupie SQL Server
INSERT INTO mytable ([ID], [FK_ID], [TYPE_ID])
VALUES
(1, 10, 1),
(2, 11, 1), (3, 11, 2),
(4, 12, 1), (5, 12, 2), (6, 12, 3),
(7, 14, 2), (8, 14, 3)
Teraz, tutaj staram się sprawdzić, czy w każdej grupie przez FK_ID
mamy dokładne dopasowanie TYPE_ID
wartości 1 & 2
.
Więc oczekiwany wynik jest jak:
(1, 10, 1)
to powinno zawieść- jak w grupie
FK_ID = 10
mamy tylko jeden rekord
- jak w grupie
(2, 11, 1), (3, 11, 2)
ten powinien przejść- Podobnie jak w grupie
FK_ID = 11
mamy dwa zapisy. - I zarówno
TYPE_ID
są dopasowane wartości1 & 2
.
- Podobnie jak w grupie
(4, 12, 1), (5, 12, 2), (6, 12, 3)
powinno to również nie- Jak mamy 3 zapisy tutaj.
(7, 14, 2), (8, 14, 3)
powinno to również nie- Nawet jeśli mamy dokładnie dwa rekordy, powinien zawieść jak
TYPE_ID
tutaj nie są dopasowane z1 & 2
wartości.
- Nawet jeśli mamy dokładnie dwa rekordy, powinien zawieść jak
Oto moja próba:
select *
from mytable t1
where exists (select count(t2.TYPE_ID)
from mytable t2
where t2.FK_ID = t1.FK_ID
and t2.TYPE_ID in (1, 2)
group by t2.FK_ID
having count(t2.TYPE_ID) = 2);
To nie działa zgodnie z oczekiwaniami, ponieważ on również przekazać za FK_ID = 12
który ma trzy rekordy.
Demo: SQL Fiddle
Dzięki za rozwiązanie. Zadziałało. – CodeNewbie
@CodeNewbie Najlepszym sposobem, aby podziękować komuś w Stackoverflow jest zaakceptowanie go jako odpowiedzi – Valli
Jak możemy to zrobić? Nie wiem, jak to zrobić. – CodeNewbie