Tôi có một số dữ liệu mẫu như:logic để kiểm tra xem id chính xác có mặt trong một nhóm trong 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)
Bây giờ, ở đây tôi đang cố gắng để kiểm tra xem trong mỗi nhóm bởi FK_ID
chúng tôi có trận đấu chính xác của TYPE_ID
giá trị 1 & 2
.
Vì vậy, sản lượng dự kiến là như:
(1, 10, 1)
này nên thất bại- Như trong nhóm
FK_ID = 10
chúng tôi chỉ có một bản ghi
- Như trong nhóm
(2, 11, 1), (3, 11, 2)
này phải vượt qua- Như trong nhóm
FK_ID = 11
chúng tôi có hai hồ sơ. - Và cả hai
TYPE_ID
đều khớp với các giá trị1 & 2
.
- Như trong nhóm
(4, 12, 1), (5, 12, 2), (6, 12, 3)
này cũng nên thất bại- Như chúng ta đã có 3 hồ sơ ở đây.
(7, 14, 2), (8, 14, 3)
này cũng nên thất bại- Mặc dù chúng tôi có chính xác hai kỷ lục, nó nên thất bại là
TYPE_ID
đây không phù hợp với1 & 2
giá trị.
- Mặc dù chúng tôi có chính xác hai kỷ lục, nó nên thất bại là
Đây là nỗ lực của tôi:
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);
này không hoạt động như mong đợi, bởi vì nó cũng vượt qua cho FK_ID = 12
trong đó có ba hồ sơ.
Bản trình diễn: SQL Fiddle
Cảm ơn giải pháp. Nó đã làm việc. – CodeNewbie
@CodeNewbie Cách tốt nhất để cảm ơn người nào đó trong Stackoverflow là chấp nhận câu trả lời đó là câu trả lời của bạn – Valli
Làm cách nào để chúng tôi có thể làm điều đó? Tôi không biết phải làm thế nào. – CodeNewbie