代码之家  ›  专栏  ›  技术社区  ›  Jeremy Boyd

为什么sql查询会有“where 1=1”[重复]

  •  7
  • Jeremy Boyd  · 技术社区  · 17 年前

    这有什么好处吗?

    重复: Why would someone use WHERE 1=1 AND in a SQL clause?

    其中条款:

    select * from table where 1=1 and sStatus not in ('status1','status2','status3')
    

    如果你可以取消关闭这个,我想知道是否有一个目的,以便我可以重写和删除1=1,如果它是不必要的。

    7 回复  |  直到 9 年前
        1
  •  18
  •   Tundey    17 年前

    是动态查询吗?有时,在基于可选参数构建动态查询时,这会很有帮助。

        2
  •  15
  •   ΩmegaMan    6 年前

    如果您想自动向查询添加限制,这将使您的生活更轻松:

    string sql = "SELECT * FROM table WHERE 1=1";
    
    if (someflag) {
      sql += " AND valid = 1";
    }
    
    if (someotherflag) {
      sql += " AND special = 1";
    }
    
    execute(sql);
    

    WHERE 1 = 1 WHERE ... )或者如果您之前已经添加了一些其他限制(然后添加 AND ...

        3
  •  12
  •   Paul Dixon    17 年前

    如果您正在动态构建where子句,您可能会有点懒惰,并假设您添加的每个子句都可以加上前缀“and”,例如。

    $str="select foo from bar where 1=1";
    
    if ($filter1)
    {
        $str.=" and col1='frobozz'";
    }
    
        4
  •  6
  •   Jay S    17 年前

    当我在做一些懒惰的编程时,我将其用于动态where子句,不想总是检查子句是否为空,以确定我现在是否需要在动态子句之间使用“and”。

        5
  •  4
  •   Shaun Bowe    17 年前

    这只有在动态查询中才有意义。如果要在循环中添加参数,而不必检查是否已经存在一个WHERE,那么每次只需追加和Column=Value即可。

        6
  •  1
  •   cmsjr    17 年前

    我已经看到了两个原因,当您总是想要一个真实的结果时,或者当语句附加了任意数量的“and condition=value”时

        7
  •  0
  •   niczak    17 年前

    这很有趣。。。WHERE子句只包含1=1?我经常在将WHERE子句设置为 xyz="something" OR 1=1; 作为始终返回结果列表的一种方法。

    你能告诉我们更多关于这个问题的情况吗?这样我们就可以更好地回答这个问题了?