2

値のベクトルを SQL、より具体的には MS SQL Server のテーブルのすべての列と比較することは可能ですか?

たとえば、3 つの列を持つテーブル、EXAMPLE があります。

EXAMPLE: ColA, ColB, ColC

そして、その列が特定のベクトルと一致するかどうかを確認したい: ('val0', 'val1', 'val2')

私は次のような文でそれを行うことができることを知っています:

SELECT * FROM EXAMPLE WHERE ColA='val0' AND ColB = 'val1' AND ColC = 'val2' 

しかし、次のようなことができる関数 ALLEQUAL があるかどうか知りたいです。

SELECT * FROM EXAMPLE WHERE ALLEQUAL('val0', 'val1', 'val2');

その関数が存在する場合、その構文は異なる RDBMS 間でかなり異なる可能性があることを理解しており、現在は Ms SQL Server に焦点を当てています。それにもかかわらず、他のデータベース マネージャーでの例を教えていただければ幸いです。

4

3 に答える 3

0

適切に設計されたデータベースでは、テーブルに PRIMARY KEY があり、キーは行の一意の識別子になります。このため、シナリオの残りの「ベクトル」と一致させる必要はありません。

フラットな非正規化データがある場合は、動的 SQL を生成する sproc を作成して、必要なことを行うことができます。INFORMATION_SCHEMA.columns または sys.columns にクエリを実行し、最初に記述した SQL ステートメントに似たものを生成する必要があります ~"WHERE ColA='val0' AND ColB = 'val1' AND ColC = 'val2' "

FOR XML PATH('') を使用した varchar 列のみのアプローチを次に示します。

BEGIN
DECLARE @tbl TABLE(c1 VARCHAR(max), c2 VARCHAR(max), c3 VARCHAR(max))
DECLARE @vec TABLE(data VARCHAR(max))
INSERT INTO @tbl VALUES ('abc', '123', 'xyz'), ('cba', '321', 'zyx')
INSERT INTO @vec VALUES ('abc'), ('123'), ('xyz')
SELECT * FROM @tbl
WHERE c1+c2+c3 = (SELECT '' + data FROM @vec FOR XML PATH(''))
END
于 2013-07-31T11:49:35.023 に答える