我有一个表,它有这样的列,例如:
id,col1,col2,col3,col4
现在,我想检查col1, col2, col3, col4的ANY是否有传入的值。很长的路要走。
col1, col2, col3, col4
ANY
SELECT * FROM table WHERE (col1 = 123 OR col2 = 123 OR col3 = 123 OR col4 = 123);
我猜它是IN的相反版本。有没有更简单的方法来做我想做的事?
IN
5us2dqdw1#
你可以使用IN predicate ,如下所示:
SELECT * FROM table WHERE 123 IN(col1, col2, col3, col4);
它是IN的相反版本。
不,它不是,它和你在问题中使用OR的方式一样。
OR
predicate IN或集合成员关系定义为1:
其中Value Expression可以是2:
Value Expression
所以可以这样做,使用值表达式123,这是一个文字。1、2:图像来自:SQL Queries for Mere Mortals(R): A Hands-On Guide to Data Manipulation in SQL
123
p3rjfoxz2#
你可以这样做:(注意:假设列是数值。而且,如果连接的值创建了您要查找的字符序列,请使用分隔符来区分列值。管(|)是本例中的分隔符。)
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) + '|' )
xriantvc3#
我也遇到过类似的问题,我是这样解决的:
SELECT * FROM table WHERE col1 OR col2 IN(SELECT xid FROM tablex WHERE somecol = 3)
我不确定这是不是“最好的方法”,但它对我很有效。
3条答案
按热度按时间5us2dqdw1#
你可以使用
IN
predicate ,如下所示:SQL Fiddle演示
它是IN的相反版本。
不,它不是,它和你在问题中使用
OR
的方式一样。澄清一下:
predicate
IN
或集合成员关系定义为1:其中
Value Expression
可以是2:所以可以这样做,使用值表达式
123
,这是一个文字。1、2:图像来自:SQL Queries for Mere Mortals(R): A Hands-On Guide to Data Manipulation in SQL
p3rjfoxz2#
你可以这样做:(注意:假设列是数值。而且,如果连接的值创建了您要查找的字符序列,请使用分隔符来区分列值。管(|)是本例中的分隔符。)
xriantvc3#
我也遇到过类似的问题,我是这样解决的:
我不确定这是不是“最好的方法”,但它对我很有效。