50

我有一个表,其中包含这样的列,例如:

id,col1,col2,col3,col4

现在,我想检查是否ANYcol1, col2, col3, col4传入的值。

很长的路要走..

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

我想这是相反的版本IN

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

4

3 回答 3

128

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

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

SQL 小提琴演示


这是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

于 2012-12-17T14:52:07.060 回答
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) + '|'
)
于 2015-06-29T15:33:14.167 回答
1

我有一个类似的问题并以这种方式解决:SELECT * FROM table WHERE col1 OR col2 IN(SELECT xid FROM tablex WHERE somecol = 3)

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

想法?

于 2014-07-01T13:19:46.610 回答