Почему мой основной запрос успешно выполняется в то время, когда подзапрос возвращает ошибку? - PullRequest
0 голосов
/ 20 июня 2019

select 1/0 as test запрос возвращает ошибку «Ошибка деления на ноль»

Но этот работает нормально: select count(*) from (select 1/0 as test) subquery

Может кто-нибудь объяснить, почему это происходит?

Ответы [ 3 ]

2 голосов
/ 20 июня 2019

Это работает, потому что сервер sql не выполняет 1/0 из подзапроса. Вы только хотите считать строки, сервер SQL достаточно умен, чтобы знать, что это дополнительное действие, которое является избыточным. Например, эти два оператора не работают, потому что в этих случаях должно выполняться 1/0.

select count(*),test from (select 1/0 as test) subquery group by test

select test from (select 1/0 as test) subquery
0 голосов
/ 20 июня 2019

"выберите * 1/0 в качестве теста;" этот запрос не вернет никакой ошибки, он вернет таблицу со значением null, поэтому, если вы будете использовать его как подзапрос в «select count (*) from (выберите 1/0 в качестве теста); он вернет значение 1». Ведь подзапрос создает таблицу со значением null, что означает, что count станет 1. 1/0 дает ноль вместо бесконечности в sql.

0 голосов
/ 20 июня 2019

Основной запрос взаимодействует с подзапросом как обычный оператор SQL, в то время как подзапрос является чисто математической проблемой, которую нельзя разделить на ноль.

Используйте этот веб-сайт, чтобы скомпилировать SQL-заявление онлайн:

https://rextester.com/l/sql_server_online_compiler

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