sql >> Databáze >  >> RDS >> Sqlserver

Vyhledejte více hodnot ve sloupci xml v SQL

První možností by bylo přidat další existující klauzuli where.

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

Jinou verzí by bylo použití obou proměnných v příkazu xquery, počítající přístupy.

select * 
from @Test
where BasketFruits.value(
  'count(distinct-values(/FRUITS/FID[.=(sql:variable("@fruitId1"),sql:variable("@fruitId2"))]))', 'int') = 2

Dva výše uvedené dotazy budou fungovat dobře, pokud víte, kolik parametrů FID použijete při psaní dotazu. Pokud jste v situaci, kdy se počet FID liší, můžete místo toho použít něco takového.

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)
 

Vytvořte proměnnou @FIDs jako XML pro uložení hodnot, které chcete použít v dotazu.

Poslední dotaz můžete otestovat zde:https://data .stackexchange.com/stackoverflow/q/101600/relational-division-with-xquery



  1. MySQL QUERY LIKE nevrací nic

  2. Vyberte stejný sloupec pro různé hodnoty v jiném sloupci

  3. Zkopírujte více záznamů se vztahem master-details

  4. Nedefinovaný index:uživatelské jméno v C:\wamp\www\Website\storeadmin\admin_login.php..a totéž pro heslo