Что означает предложение WHERE «sql was here»?

0

Может ли кто-нибудь помочь мне понять или опубликовать какие-либо идеи по поводу этого предложения?

sql was here

Я изменил имя таблицы, но кроме этого, любая идея, что разработчик пытался сделать здесь?

После этого нет ничего, что предложение where.

  • 0
    Работает ли запрос? Какие типы столбцов? Какие данные он принимает в качестве входных данных, например? Какой вывод это дает для этих данных?
  • 0
    Да, запрос выполняется, поля даты - ДАТА.
Показать ещё 2 комментария
Теги:

5 ответов

1

Если (table.date_field = (select max(table2.exit_date) from table as table2)) равно null, он вернет 1=1, что в основном означает отсутствие предложения where.

Теперь посмотрим на это неприятное выражение. Я могу только предположить, что если "a = b" не является истинным, то это также эквивалентно null, иначе похоже, что первая ветвь всегда будет иметь место. Похоже, он пытается сказать "если последняя дата выхода равна дате поля, выберите те, в противном случае нет предложения where". Однако я не думаю, что это будет работать вообще. Это действительно выглядит в любом случае, каждая строка будет выбрана.

  • 0
    "a = b" is not true then that's also equivalent to null : a = b возвращает NULL, если A или B имеют значение NULL. Если a = b ложно, он возвращает 0, который не совпадает с NULL.
  • 0
    @somedev: если «противное выражение» возвращает false , строка не возвращается. Если она возвращает либо true или NULL , он возвращает строку.
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. Поэтому он, вероятно, работает так, как предполагалось, но случайно.

  • Использование IFNULL() заключается в том, что если значение date_field или MAX(exit_date) равно NULL, оно возвращает строку. Если вы не использовали эту функцию, то value = NULL будет оцениваться как неизвестное, что означает, что строка не будет возвращена.

1

Мне кажется, что он пытается найти строку, где table.date_field равна максимальному значению table.exit_data. Существует проверка нулевого значения, которое, как я думаю, произойдет в любом из этих случаев:

  • table пуст
  • все строки в table имеют exit_data для NULL
  • table.date_field NULL для рассматриваемой строки

В любом из этих трех случаев строка будет возвращена. Я не понимаю, почему он использует строку '1=1' вместо, чтобы привести несколько примеров: 1=1, 1 или true, но он работает нормально. В первом случае я предполагаю, что в результирующем наборе не будет никаких строк (в зависимости от остальной части запроса), поэтому он, вероятно, пытался справиться с одним из двух других случаев - я бы предпочел последний.

Это только объяснение того, что происходит. Чтобы понять, почему он это делает, это поможет, если вы дадите немного больше контекста.

  • 0
    Но результат не проверяется, так что все это бессмысленно, верно? Или по умолчанию это проверка на истинность, если ничего не дано? где ifnull () = true?
  • 0
    somedev: Нет, тестировать его не обязательно - он работает нормально, как есть.
1

Функция MySQL ifnull возвращает первый аргумент, если он не является нулевым, иначе второй аргумент. Похоже, что он пытается сопоставить table.date_field с max (table2.exit_date) и возвращать true, если комминик не был возможен из-за нулей.

  • 0
    Но результат никогда не проверяется, верно?
0

В нем говорится, что если table.date_field = максимальная дата выхода или если max exit_date имеет значение null или table.date_field равно null, возвращайте true. Вернет false, если max exit_date не равен null, а table.date_field не является нулевым, но они не равны.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню