sql >> データベース >  >> RDS >> Sqlserver

SQLのxml列で複数の値を検索

    最初のオプションは、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
      

    別のバージョンでは、xquery ステートメントで両方の変数を使用して、ヒットをカウントします。

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

    上記の 2 つのクエリは、クエリを作成するときに使用する FID パラメータの数がわかっている場合に問題なく機能します。 FID の数が異なる状況にある場合は、代わりにこのようなものを使用できます。

    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)
     
      

    クエリで使用する値を保持するために、@FIDs 変数を XML として作成します。

    ここで最後のクエリをテストできます:https://data .stackexchange.com/stackoverflow/q/101600/relational-division-with-xquery



    1. 1で始まるように、1次元配列の配列添え字を正規化します。

    2. データベースからjsp(私はサーブレットをマッピングしています)に複数の画像を表示したいので、jspmではimgタグのsrcに表示します

    3. Oracleチェック制約を使用して登録数を制限するにはどうすればよいですか?

    4. Javaのシーケンシャルストリームとパラレルストリームとは何ですか?