匹配具有相同SQL值的多个列

匹配具有相同SQL值的多个列,sql,Sql,假设该表包含类似于akey1、bkey2、ckey3的列,以及更多类似的列。 有没有办法搜索公共值 从表中选择*,其中%key%类似于“xyz” 而不是使用多个AND、OR条件。 不管解决方案是否是特定于DBMS的。除了动态sql之外,您还必须拼出每个列名。但您可以获得一些语法快捷方式,只列出一次常量: SELECT * FROM table WHERE 'xyz' IN (akey1, bkey2, ckey3) 使用动态sql,您仍然必须发出相同的查询。。。但是您至少可以先使用字符串工具来

假设该表包含类似于
akey1
bkey2
ckey3
的列,以及更多类似的列。
有没有办法搜索公共值

从表中选择*,其中%key%类似于“xyz”

而不是使用多个AND、OR条件。
不管解决方案是否是特定于DBMS的。

除了动态sql之外,您还必须拼出每个列名。但您可以获得一些语法快捷方式,只列出一次常量:

SELECT * FROM table WHERE 'xyz' IN (akey1, bkey2, ckey3)

使用动态sql,您仍然必须发出相同的查询。。。但是您至少可以先使用字符串工具来构建它,如果您想使用通配符匹配,您可以在
信息\u schema.columns
视图中查找它们。然而,这涉及到打开并在游标上迭代,或者将列数据返回给客户机,这两者都涉及到比在原始查询中列出列名更多的工作。希望您在开始向数据库发出查询之前至少了解数据库。

您也可以尝试这种方法

更改程序USP\u GetClinicNameList
@SearchStr varchar(50)
作为
开始
设置@SearchStr=RTRIM(@SearchStr)+'%
选择顶部(10)
*
来自c诊所
其中c.cclinicname类似于@SearchStr
或者像@SearchStr这样的c.caddress1
或者像@SearchStr这样的c.caddress2
或者像@SearchStr这样的c.ccity
或者像@SearchStr这样的c.cstate
或者像@SearchStr这样的c.cclinicid
或者像@SearchStr这样的c.czip
或者像@SearchStr这样的c.ccliniccode
或者像@SearchStr这样的c.cphone
c.c.ClinicName订购
结束

什么???不到十分钟前,另一个人问了同样的问题,那就是要一个名为
foo
的栏目。在看到该问题后,我问了这个问题。是否要在多个列中搜索?最终,它们是相同的问题(在从OP获得澄清后),但您的问题更清楚。此查询的可能重复性能将非常低。我建议执行类似这样的查询“从表中选择*,其中akey1='xyz'或bkey2='xyz'或ckey3='xyz';”,其中每个列都有索引。这通常会产生基本相同的执行计划,我怀疑您对索引工作原理的理解是有缺陷的。您不能单独为这些列编制索引并期望它有所帮助。通常,一个表上只有一个索引可以在该表的给定查询中使用(尽管查询引擎可以将其重写为一组联合,在这种情况下,多个索引会有所帮助……但这不是标准)。