Tùy chọn đầu tiên sẽ là thêm một mệnh đề where khác tồn tại.
declare @fruitId1 int;
set @fruitId1=1;
declare @fruitId2 int;
set @fruitId2=3;
select *
from @Test
where
BasketFruits.exist('/FRUITS/FID[.=sql:variable("@fruitId1")]')=1 and
BasketFruits.exist('/FRUITS/FID[.=sql:variable("@fruitId2")]')=1
Một phiên bản khác sẽ sử dụng cả hai biến trong câu lệnh xquery, đếm số lần truy cập.
select *
from @Test
where BasketFruits.value(
'count(distinct-values(/FRUITS/FID[.=(sql:variable("@fruitId1"),sql:variable("@fruitId2"))]))', 'int') = 2
Hai truy vấn trên sẽ hoạt động tốt nếu bạn biết bạn sẽ sử dụng bao nhiêu tham số FID khi viết truy vấn. Nếu bạn đang ở trong tình huống mà số lượng FID thay đổi, bạn có thể sử dụng một cái gì đó như thế này để thay thế.
declare @FIDs xml = '<FID>1</FID><FID>3</FID>'
;with cteParam(FID) as
(
select T.N.value('.', 'int')
from @FIDs.nodes('FID') as T(N)
)
select T.BasketName
from @Test as T
cross apply T.BasketFruits.nodes('/FRUITS/FID') as F(FID)
inner join cteParam as p
on F.FID.value('.', 'int') = P.FID
group by T.BasketName
having count(T.BasketName) = (select count(*) from cteParam)
Xây dựng biến @FIDs dưới dạng XML để giữ các giá trị bạn muốn sử dụng trong truy vấn.
Bạn có thể kiểm tra truy vấn cuối cùng tại đây: https:// data .stackexchange.com / stackoverflow / q / 101600 / relational-split-with-xquery