【问题标题】:SQL In Clause Multiple ColumnsSQL In 子句多列
【发布时间】:2012-11-15 12:24:01
【问题描述】:
SELECT *
FROM Tabl tabb
WHERE (tabb.col1, tabb.col2) IN ( (1,2), (3,4))

以上内容在 Oracle 中有效,但我尝试在专有 SQL 引擎中运行,该引擎不支持上述 IN 中具有多列的查询格式。

我正在尝试在数据库中查找 1,2 和 3,4 的组合。

请帮助我实现上述目标。

我正在寻找从 Java 一次性传递 col1 和 col2 值列表的方法,因此 '=' 可能不是一个选项,因为它可能需要两个 SQL 语句才能实现上述目标。

【问题讨论】:

  • 使用样本数据会更容易,您想要 col1 = 1 和 col2 = 2 或 col1 = 3 和 col2 = 4 的结果?
  • 是的,我想要 col1 = 1 和 col2 = 2 或 col1 = 3 和 col2 = 4 的结果。
  • 我认为@hall stephenk 的答案是正确的...

标签: sql multiple-columns in-clause in-operator


【解决方案1】:

如果是数字列并假设值限制在特定范围内 使用某些公式可以将更多值打包到一个数字中

例如假设 col1 和 col2 的值是从 1 到 1000 公式

  N = 10000 * col1 + col2

可以使用,在示例中选择将是

  SELECT * FROM Tabl tabb WHERE (10000 * tabb.col1 + tabb.col2) IN ( 10002, 30004)

一般来说,字符串连接可以用来组合多个列值,例如

  SELECT * FROM Tabl tabb WHERE (tabb.col1||"&"||tabb.col2) IN ( "1&2", "3&4")

【讨论】:

    【解决方案2】:

    你可以这样做:

    SELECT *
    FROM Tabl tabb
    inner join (
        select 1 a, 2 b 
        union select 3, 4
    ) x
    on tabb.col1 = x.a
    and tabb.col2 = x.b
    

    【讨论】:

    • 就像我在问题中提到的,值 1,2,3,4 是静态值,而不是选择的结果。
    【解决方案3】:

    这个怎么样?

    SELECT
        *
    FROM
        Tabl tabb
    WHERE
        (tabb.col1 = 1 AND tabb.col2 = 2) OR
        (tabb.col1 = 3 AND tabb.col2 = 4)
    

    【讨论】:

    • 抱歉之前没有更清楚,请参阅上面的编辑问题。
    猜你喜欢
    • 2012-10-13
    • 2019-02-15
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 2019-06-24
    • 2011-01-12
    • 1970-01-01
    相关资源
    最近更新 更多