“sql在这里”的WHERE子句是什么意思?

时间:2010-01-25 21:20:03

标签: mysql

任何人都可以帮助我理解或发布有关此where子句的任何想法吗?

sql was here

我已经更改了表名,但除此之外,还知道开发人员在这里尝试做什么吗?

之后没有别的,那就是where子句。

5 个答案:

答案 0 :(得分:1)

如果(table.date_field = (select max(table2.exit_date) from table as table2))为空,它将返回1=1,这基本上意味着根本没有where子句。

现在让我们看看那个讨厌的表情。我只能假设如果“a = b”不为真,那么它也等于null,否则看起来第一个分支总会发生。看起来它试图说“如果最新的退出日期等于日期字段,请选择那些,否则没有where子句”。但是,我认为这根本不会起作用。它看起来真的是两种方式,每一行都会被选中。

答案 1 :(得分:1)

MySQL ifnull函数返回第一个参数,如果它不为null,否则返回第二个参数。这看起来像是尝试将table.date_field与max(table2.exit_date)进行比较,如果由于空值而无法进行同步,则返回true。

答案 2 :(得分:1)

在我看来,他正试图找到table.date_field等于table.exit_data的最大值的行。我认为在任何这些情况下都会检查null:

  • table为空
  • table中的所有行都将exit_data设置为NULL
  • table.date_field对于有问题的行<{1}}

在这三种情况中的任何一种情况下,都会返回该行。我不明白为什么他使用字符串NULL代替,给出一些例子:'1=1'1=11,但似乎工作正常。在第一种情况下,我假设结果集中没有行(取决于查询的其余部分),所以他可能正在尝试处理其他两种情况中的一种 - 我猜最后一种情况。

这只是对正在发生的事情的解释。为了理解为什么他正在做这件事,如果你提供更多的背景知识会有所帮助。

答案 3 :(得分:1)

  • MySQL是非标准的,因为 true 实际上等于数值1.任何计算结果为 true 或任何非零值的表达式都满足条件。

    mysql> CREATE TABLE foo AS SELECT 1=1 AS f;
    mysql> SHOW CREATE TABLE foo;
    CREATE TABLE `foo` (
      `f` INT NOT NULL DEFAULT '0'
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1
    

    因此,以下WHERE子句在MySQL中是合法的,但在大多数其他SQL数据库中是不合法的:

    ... WHERE 1;
    
  • 有些人使用1=1作为占位符条件,意味着 true ,但是将它放在字符串中是没有意义的,因为SQL表达式不等同于eval()函数和其他语言一样。在这种情况下,字符串中的前导字符1被隐式转换为数值1,在MySQL中被解释为 true 。所以它可能按预期工作,但有点意外。

  • 使用IFNULL()是因为如果date_fieldMAX(exit_date)为NULL,则返回该行。如果你没有使用这个函数,那么任何 = NULL将被评估为 unknown ,这意味着不会返回该行。

答案 4 :(得分:0)

它基本上表示如果table.date_field =最大退出日期或者如果max exit_date为null或table.date_field为null则返回true。如果max exit_date不为null且table.date_field不为null但它们不相等,则返回false。