MySQL中“WHERE TRUE”的用途是什么?

时间:2016-06-16 02:43:20

标签: mysql

我正在研究我同事的旧项目,我找到了她的代码WHERE TRUE AND ID='1' AND STAT='1'。 我已尝试删除TRUE AND,因此查询变为WHERE ID='1' AND STAT='1'并获得相同的结果。

我知道我们可以使用TRUE作为布尔来搜索“某些地方是真的”,例如WHERE FLAG = TRUEthis MySQL documentation state that

  

常量TRUE和FALSE分别计算为1和0。常量名称可以用任何字母组写。

我也尝试了SELECT * FROM MYTABLE WHERE TRUE,但它与SELECT * FROM MYTABLE

相同

TRUE在她的查询中的目的是什么?

3 个答案:

答案 0 :(得分:2)

它没有特定的功能目的。如果您的同事遵守特定的样式指南,建议所有SELECT查询都有明确的WHERE子句,那么您的同事可能已将其包括在内。如果未提供显式WHERE子句,则默认为选择所有行。添加始终为true的WHERE子句将产生相同的效果。

此查询可能产生的另一种方式是,它是否由代码生成工具生成,由于编写方式,它总是必须写入WHERE子句。

例如:

myQuery = "SELECT X FROM Y WHERE " + ConditionMet(data)?" AccountID = '" + AcctId + "'" : "1=1";

这意味着如果ConditionMet(data)为true,则只返回AccountID与您传入的AcctId匹配的行。如果为false,则返回所有行。

添加“dummy”1 = 1使代码生成器更易于编写。

同样,添加一个始终为false的WHERE子句(例如“WHERE 1 = 0”)将导致返回零行。

答案 1 :(得分:1)

它不是很重要,但是在添加动态条件的地方(例如在php中)是否重要?

  $condition_stmt="";
    if ($start_date !="" && $end_date!="")
    {
        $condition_stmt="and nos.status_date between '".$start_date."' and '".$end_date."'";
    }
    else if ($start_date!="")
    {
        $condition_stmt="and nos.status_date >='".$start_date."'";
    }
    else 
    {
        $condition_stmt="and nos.status_date <='".$end_date."'";
    }

$ sql =“ select * from table where true”。$ condition_stmt =。“;

答案 2 :(得分:0)

如果您是在运行时编写SQLString的,可能会添加不同的“ where”子句,但您不知道它们中的哪一个将是第一个,则这很容易,因为它们都可以以“ AND .....“

示例:

SQLString:='SELECT * FROM YOUTABLE WHERE TRUE'

If condition1 THEN SQLString:=SQLString+' AND Whatever=whatever';
If condition2 THEN SQLString:=SQLString+' AND Whatever=whatever';
If condition3 THEN SQLString:=SQLString+' AND Whatever=whatever';
If condition4 THEN SQLString:=SQLString+' AND Whatever=whatever';

否则,您不应该在第一个SQLString:=上添加WHERE子句,而是在碰巧为真的第一个条件上添加WHERE子句,您不知道这将是先验的