Если у меня есть SQL-запрос с предложением где, что происходит, когда нет оператора на `где`? - PullRequest
1 голос
/ 14 августа 2011

Например, если у меня был следующий запрос:

select * from msgs as e left outer join msgs as m on e.id = m.id where m.property

что именно происходит в where части запроса?

1 Ответ

2 голосов
/ 14 августа 2011

Если значение m.property оценивается как true при интерпретации как логическое выражение, строка выбирается.

См. http://www.sqlite.org/lang_select.html#whereclause

Там написано

  • Если указано предложение WHERE, выражение WHERE оценивается для каждой строки во входных данных как логическое выражение. Все строки, для которых выражение предложения WHERE оценивается как ложное, исключаются из набора данных перед продолжением.

Для логического выражения это говорит

  • Чтобы преобразовать результаты выражения SQL в логическое значение, SQLite сначала приводит результат к числовому значению так же, как выражение CAST. NULL или нулевое значение (целое значение 0 или реальное значение 0.0) считается ложным. Все остальные значения считаются верными. Например, значения NULL, 0.0, 0, «english» и «0» считаются ложными. Значения 1, 1.0, 0.1, -0.1 и '1english' считаются верными.

Таким образом, он должен оценить m.property и привести его к логическому значению, и сохранить строки, для которых это верно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...