Как это EXCEPT работает в MS SQL в следующем примере - PullRequest
0 голосов
/ 21 июня 2019

Я новичок в MS SQL, но мне приходится работать с ним все больше и больше. Я сталкивался с чем-то, кто-то писал раньше и не писал никаких документов на него ... (повезло мне ...), и я просто не могу обернуться вокруг этого утверждения:

BEGIN TRANSACTION loadMissingAllocations
    INSERT INTO @missingAllocs
    SELECT * FROM @absAllocs
    EXCEPT
    SELECT * FROM @ttaAllocs
    SET @rowCount = @@ROWCOUNT
SET @eventDetails = 'End loadMissingAllocations: ' + CAST(@rowCount as VARCHAR(10)) + ' rows affected';
COMMIT TRANSACTION loadMissingAllocations

Итак, похоже, что мы выбираем все из absALLOCS и вставляем это в отсутствующие ALLOCS, но ИСКЛЮЧЕНИЕ для меня кажется совершенно неуместным ... Я понимаю что-то вроде:

«Выберите все из x, кроме всего из y, и поместите его в z».

Этого не может быть, верно?

Спасибо за ваше руководство! :)

Ответы [ 2 ]

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

Ваша интуиция права.

«Выберите все из x, кроме всего из y, и поместите его в z».

Перевод этого в таблицы будет означать:

SELECT EVERYTHING FROM @absAllocs
EXCEPT 
WHAT ALREADY EXISTS IN @ttaAllocs
AND
STORE THAT RESULT IN @missingAllocs

или

Все, что существует в @absAllocs, но не существует в @ttaAllocs, за исключением @missingAllocs.

1 голос
/ 21 июня 2019

Хорошее визуальное представление предложения EXCEPT в ссылке.

https://www.essentialsql.com/get-ready-to-learn-sqlserver-18-how-to-use-the-except-operator/

EXCEPT в основном удаляет общие элементы из двух таблиц и не берет элементов из второй таблицы.

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