我有一个表,其中包含这样的列,例如:
id,col1,col2,col3,col4
现在,我想检查是否ANY
有col1, col2, col3, col4
传入的值。
很长的路要走..
SELECT * FROM table WHERE (col1 = 123 OR col2 = 123 OR col3 = 123 OR col4 = 123);
我想这是相反的版本IN
。
有没有更简单的方法来做我想做的事?
我有一个表,其中包含这样的列,例如:
id,col1,col2,col3,col4
现在,我想检查是否ANY
有col1, col2, col3, col4
传入的值。
很长的路要走..
SELECT * FROM table WHERE (col1 = 123 OR col2 = 123 OR col3 = 123 OR col4 = 123);
我想这是相反的版本IN
。
有没有更简单的方法来做我想做的事?
您可以使用IN
谓词,如下所示:
SELECT * FROM table WHERE 123 IN(col1, col2, col3, col4);
这是IN的相反版本。
不,不是,这与OR
您在问题中使用 s 的方式相同。
谓词IN
或集合成员资格定义为1:
其中Value Expression
可以是2:
因此,使用值表达式123
(即文字)以这种方式执行此操作是可以的。
1, 2:图片来自: SQL Queries for Mere Mortals(R): A Hands-On Guide to Data Manipulation in SQL
您可以执行以下操作:(注意:假设列是数值。并且,如果连接的值创建您要查找的字符序列,请使用分隔符来区分列值。管道(|)是这里的分隔符例子。)
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) + '|'
)
我有一个类似的问题并以这种方式解决:SELECT * FROM table WHERE col1 OR col2 IN(SELECT xid FROM tablex WHERE somecol = 3)
不确定这是否是“最好的方法”,但它对我有用。
想法?