【问题标题】:grouping IN statement sql分组IN语句sql
【发布时间】:2011-06-15 02:41:34
【问题描述】:

假设我有一个名为 table1 的表,它对应的列是 col1、col2、col3 和 col4。

相当于做什么:

-- note that the following query will not work
SELECT * 
  FROM table1 
 WHERE col1, col2 IN (SELECT col1, col2 
                        FROM table1 
                       WHERE col3 < 4)

我是否必须在我的数据库中合并 col1 和 col2 才能完成这项工作?如果我将 col1 和 col2 合并到 col1_2 中,那么我将能够通过编写使上述查询工作:

SELECT * 
  FROM table1 
 WHERE col1_2 IN (SELECT col1_2 
                    FROM table1 
                   WHERE col3 < 4)

使用一列时,IN 子句可以正常工作。如果我可以将它与多个列一起使用而无需修改数据库,那就太好了。

【问题讨论】:

  • 也许来晚了,但和SELECT * FROM table1 WHERE col3 &lt; col4不一样吗?
  • 不,不完全一样。想象一下两行的简单情况,它们具有相同的 col1、col2 值,但 row1 的 col3 col4。在所需的情况下,将返回两行。

标签: sql sqlite


【解决方案1】:
SELECT * from table1 t1, table1 t2
where t1.col1=t2.col1 and t1.COl2=t2.Col2 and t1.col3<4

试试这个

【讨论】:

    【解决方案2】:

    与您展示的内容等效的是:

    SELECT *
    FROM table1 tb1
    WHERE EXISTS
    (
        SELECT *
        FROM table1 tb2
        WHERE 
            tb1.col1 = tb2.col1 and 
            tb1.col2 = tb2.col2 and
            tb2.col3 < 4
    )
    

    但是,这个查询没有多大意义,因为它相当于

    SELECT *
    FROM table1 tb1
    WHERE tb2.col3 < 4
    

    我只是假设您展示的示例没有经过深思熟虑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 2012-04-25
      • 2011-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多