私は...配列がクエリのサブセットを評価するかどうかを確認しますか?
1
2
6
8
9
と私と私はSQLで確認することができますどのような値2,3,6
と配列ユーザーからの行のセット
SELECT IDをしました配列はクエリの結果のサブセットですか?
私は...配列がクエリのサブセットを評価するかどうかを確認しますか?
1
2
6
8
9
と私と私はSQLで確認することができますどのような値2,3,6
と配列ユーザーからの行のセット
SELECT IDをしました配列はクエリの結果のサブセットですか?
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つを設定取得したい。)可能
使用Dynamic SQL:
declare @cmd varchar(200)
select @cmd = "select id from Users WHERE id in (" + @array + ")"
exec(@cmd)
いいえ、IN句ではなく、クエリ他の方法を実行している場合、選択されたIDは配列の制限から作成されます。 –
2,3,6がすべてテーブルに存在するかどうか確認したいですか?あるいは、彼らはその順序で存在していますか?正確には? –
このリストが確定的なサブセットであることを確認したい場合は、配列の要素数を計算し、この操作の戻り値の長さと比較する必要があります。 – eftpotrm
あなたがそれらをカウントし、その後、個別に各レコード/項目をチェックする必要があります。
JOINが配列と同じサイズの場合、配列はテーブルのサブセットです。ここで
は、テーブル内で使用しているアレイを前提としてい例です...
SELECT
COUNT(*)
FROM
Users
INNER JOIN
search
ON search.id = Users.id
HAVING
COUNT(*) = (SELECT COUNT(*) FROM search)
あなたは、あなたがこれを行うことができますに対してテストする必要がある値を持つ1つの列のテーブルを読み込むことができます。
Select count(*)
From
(
Select id
From users
Intersect
Select id
From testValues
) test
カウントがテストする値の数と等しい場合、配列はサブセットを形成します。
もちろん、これはあなたがintersectでSQLバリアントを使用していることを前提としています。 Demsのソリューションはどこでも使えるはずです。 –
[SQLのサブセットが存在するすべての行を選択する]の複製(0120-13-011) – onedaywhen