2012-01-10 7 views

答えて

2

SQLはそれほど配列をサポートしていないので、私は完全にはわかりませんどのようにあなたはあなたの配列を格納しています、そして、この質問に答える最良の方法に影響します。言っ

、私はこれを行うだろう:

基本的なクエリです
SELECT u.id 
FROM Users U 
    RIGHT JOIN Numbers N 
     ON U.id=N.Number 
WHERE N.Number IN (2,3,6) 

。そこからの正確な情報は、障害を検出するために何をしているかによって異なります。 u.IDがNULLのレコードは、それがサブセットではないことを示します。あなたが実際にすぐにIDのセットをしたくない場合は、> 0だった行方不明時はいつでもあなたはサブセットを持っていなかった知っていると思います

SELECT COUNT(*) AS Missing 
FROM Users U 
    RIGHT JOIN Numbers N 
     ON U.id=N.Number 
WHERE N.Number IN (2,3,6) 
AND u.id IS NULL 

と、それを修正することができます。 (SQL Serverでは、intをビットにキャストして、0 = false、!0 = trueにするとアプリが動作しやすくなります)

その他の詳細あなたは実際にやろうとしていますが、うまくいけばそれは基本的なテクニックとして理にかなっています。

(NBは、このすべてのあなたのデータベース内の数字/集計テーブルを持っていることを前提としています。彼らは信じられないほど便利です、あなたはまだいない場合、私は1つを設定取得したい。)可能

1

使用Dynamic SQL

declare @cmd varchar(200) 
select @cmd = "select id from Users WHERE id in (" + @array + ")" 

exec(@cmd) 
+0

いいえ、IN句ではなく、クエリ他の方法を実行している場合、選択されたIDは配列の制限から作成されます。 –

+0

2,3,6がすべてテーブルに存在するかどうか確認したいですか?あるいは、彼らはその順序で存在していますか?正確には? –

+0

このリストが確定的なサブセットであることを確認したい場合は、配列の要素数を計算し、この操作の戻り値の長さと比較する必要があります。 – eftpotrm

2

あなたがそれらをカウントし、その後、個別に各レコード/項目をチェックする必要があります。

JOINが配列と同じサイズの場合、配列はテーブルのサブセットです。ここで

は、テーブル内で使用しているアレイを前提としてい例です...

SELECT 
    COUNT(*) 
FROM 
    Users 
INNER JOIN 
    search 
    ON search.id = Users.id 
HAVING 
    COUNT(*) = (SELECT COUNT(*) FROM search) 
1

あなたは、あなたがこれを行うことができますに対してテストする必要がある値を持つ1つの列のテーブルを読み込むことができます。

Select count(*) 
From 
    (
     Select id 
     From users 
     Intersect 
     Select id 
     From testValues 
    ) test 

カウントがテストする値の数と等しい場合、配列はサブセットを形成します。

+0

もちろん、これはあなたがintersectでSQLバリアントを使用していることを前提としています。 Demsのソリューションはどこでも使えるはずです。 –

関連する問題