检查一个值的多个列

时间:2012-12-17 14:51:15

标签: mysql sql select query-optimization

我有一个表格,例如:

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); 的相反版本。

有没有更简单的方法来做我想要的事情?

3 个答案:

答案 0 :(得分:96)

您可以使用IN谓词,如下所示:

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

SQL Fiddle Demo


  

这是IN的相反版本。

不,不是,与您在问题中使用OR的方式相同。


澄清一下:

谓词IN或集合成员资格定义为 1

enter image description here

Value Expression可以是 2

enter image description here

因此可以这样做,使用值表达式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)

不确定是否是"最佳方式"但它对我有用。

<强>思考吗