mysql 为一个值检查多个列

hjzp0vay  于 12个月前  发布在  Mysql
关注(0)|答案(3)|浏览(205)

我有一个表,它有这样的列,例如:

id,col1,col2,col3,col4

现在,我想检查col1, col2, col3, col4ANY是否有传入的值。
很长的路要走。

SELECT * FROM table WHERE (col1 = 123 OR col2 = 123 OR col3 = 123 OR col4 = 123);

我猜它是IN的相反版本。
有没有更简单的方法来做我想做的事?

5us2dqdw

5us2dqdw1#

你可以使用IN predicate ,如下所示:

SELECT * FROM table WHERE 123 IN(col1, col2, col3, col4);

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

p3rjfoxz

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) + '|'
)
xriantvc

xriantvc3#

我也遇到过类似的问题,我是这样解决的:

SELECT *
FROM table
WHERE col1 OR col2 IN(SELECT xid FROM tablex WHERE somecol = 3)

我不确定这是不是“最好的方法”,但它对我很有效。

相关问题