是否可以将值向量与SQL中表的所有列进行比较,更具体地说,在MS SQL Server中进行比较?
例如,我有一个表,EXAMPLE,有3列:
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。不过,如果你能给我其他数据库管理员的例子,我将非常高兴。
答案 0 :(得分:1)
也许这会对你有所帮助
SELECT *
FROM EXAMPLE
WHERE ColA+ColB+ColC = 'val0'+'val1'+'val2'
答案 1 :(得分:1)
declare @Foo as Table ( ColA Int, ColB Int );
insert into @Foo ( ColA, ColB ) values ( 1, 1 ), ( 1, 2 ), ( 2, 1 );
select * from @Foo;
select *
from @Foo
intersect
select *
from ( values ( 2, 1 ) ) as Bar( ColA, ColB );
答案 2 :(得分:0)
在设计良好的数据库中,表将具有PRIMARY KEY,键将是该行的唯一标识符,因此不需要匹配场景中“vector”的其余部分。
现在,如果你有一些扁平的非规范化数据,你可以创建一个生成动态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