Меня смущает SQL-запрос, и, честно говоря, это одна из тех вещей, о которых я даже не знаю, как Google. Таким образом StackOverflow.
У меня есть то, что я считаю простым запросом.
SELECT Id
FROM Customer
WHERE Id IN (SELECT Id from @CustomersWithCancelledOrders)
Здесь я нахожу странность. В переменной @CustomersWithCancelledOrders нет столбца с именем Id. Но ошибки нет.
В результате это идентификаторы для всех клиентов. Каждый из. Который, очевидно, побеждает в том, что нужно выполнить подзапрос.
Это похоже на использование столбца Идентификатор из внешней таблицы (Клиенты), но я не понимаю, почему он это сделает. Есть ли причина, по которой вы хотели бы это сделать? Я пропустил что-то невероятно очевидное?
SQLFiddle от странности. Это не лучший SQL Fiddle, поскольку я не мог найти способ вернуть несколько наборов результатов на этом веб-сайте, но он демонстрирует, как я столкнулся с этой проблемой.
Я предполагаю, что то, что я ищу, - это имя для "функции" выше, какая-то информация о том, почему он делает то, что он делает, и о том, что на самом деле означает неправильный запрос.
Я обновил вышеупомянутый вопрос, чтобы использовать немного лучший пример. Его все еще изобретали, но его ближе к script я написал, когда я действительно столкнулся с проблемой.
После некоторого чтения коррелированных подзапросов это выглядит так: моя опечатка (используя неправильный столбец Id в подзапросе) изменяет поведение подзапроса.
Вместо того, чтобы оценивать результаты подзапроса один раз, а затем обрабатывать эти результаты как набор (это было то, что я намеревался), он оценивает подзапрос для каждой строки во внешнем запросе.
Это означает, что подзапрос оценивает набор различных результатов для каждой строки, и в этом наборе результатов гарантируется идентификатор клиента этой строки. Подзапрос возвращает набор, состоящий из идентификатора строки, повторенной X раз, где X - количество строк в переменной таблицы, которая выбрана из.
...
Свое очень сложно написать краткое описание моего понимания проблемы. Сожалею. Я думаю, что теперь я хорош.