我有一个表格,例如:
id,col1,col2,col3,col4
现在,我想检查ANY
的{{1}}是否具有传入的值。
要做的很长的路要走..
col1, col2, col3, col4
我猜这是SELECT * FROM table WHERE (col1 = 123 OR col2 = 123 OR col3 = 123 OR col4 = 123);
的相反版本。
有没有更简单的方法来做我想要的事情?
答案 0 :(得分:96)
您可以使用IN
谓词,如下所示:
SELECT * FROM table WHERE 123 IN(col1, col2, col3, col4);
这是IN的相反版本。
不,不是,与您在问题中使用OR
的方式相同。
谓词IN
或集合成员资格定义为 1 :
Value Expression
可以是 2 :
因此可以这样做,使用值表达式123
,这是一个文字。
1,2:图像来自:SQL Queries for Mere Mortals(R): A Hands-On Guide to Data Manipulation in SQL
答案 1 :(得分:2)
您可以执行以下操作:(注意:假设列是数值。并且,只要使用连接值创建您要查找的字符序列,请使用分隔符来区分列值。管道(|)是这个例子中的分隔符。)
SELECT [ID]
,[Col1]
,[Col2]
,[Col3]
,[Col4]
FROM [Table1]
WHERE '123' IN (
CAST([Col1] AS VARCHAR) + '|'
+ CAST([Col2] AS VARCHAR) + '|'
+ CAST([Col3] AS VARCHAR) + '|'
+ CAST([Col4] AS VARCHAR) + '|'
)
答案 2 :(得分:1)
我遇到了类似问题并以这种方式解决了问题:SELECT * FROM table WHERE col1 OR col2 IN(SELECT xid FROM tablex WHERE somecol = 3)
不确定是否是"最佳方式"但它对我有用。
<强>思考吗