【问题标题】:Checking multiple columns for one value检查多个列的一个值
【发布时间】:2012-12-04 16:20:48
【问题描述】:

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

id,col1,col2,col3,col4

现在,我想检查 col1, col2, col3, col4 中的 ANY 是否有传入的值。

要做到这一点还有很长的路要走..

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

我猜是IN的相反版本。

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

【问题讨论】:

    标签: mysql sql select query-optimization


    【解决方案1】:

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

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

    SQL Fiddle Demo


    它是 IN 的相反版本。

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


    澄清这一点:

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

    Value Expression 可以是 2:

    所以这样就可以了,使用值表达式123,它是一个字面量。


    1、2:图片来自:SQL Queries for Mere Mortals(R): A Hands-On Guide to Data Manipulation in SQL

    【讨论】:

    • 如何将多个值作为要搜索的值传递?例如“123”和“456”。
    • @AlagesanPalani - 同样的方式:SELECT * FROM YourTable WHERE columnName IN (123, 456');
    • 不,我想要 select * from tablename where '123','456' in(col1,col2,col3)
    • 我使用 set uid1=IF(uid1 IS NULL, IF ('@myUniqueID' not in (uid2,uid3,uid4),'@myUniqueID', NULL ), uid1) 但不起作用
    • 优秀的解决方案。有效。我不敢相信我以前从未尝试过。
    【解决方案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) + '|'
    )
    

    【讨论】:

      【解决方案3】:

      我遇到了类似的问题,用这种方法解决了:SELECT * FROM table WHERE col1 OR col2 IN(SELECT xid FROM tablex WHERE somecol = 3)

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

      想法?

      【讨论】:

      • 这实际上确实有效,即使在....谢谢!示例:SELECT * FROM table WHERE (owner_id, user_id) IN (1, 2, 3);
      猜你喜欢
      • 2015-07-24
      • 1970-01-01
      • 2020-09-16
      • 1970-01-01
      • 2018-05-13
      • 2017-05-21
      • 1970-01-01
      • 1970-01-01
      • 2021-08-13
      相关资源
      最近更新 更多