Как SQL-запрос может иметь два предложения from? - PullRequest
10 голосов
/ 04 ноября 2011

Это выглядит так странно для меня:

delete from GearsDev.dbo.Products 
from GearsDev.dbo.Products as C
inner join #Common as M
    on M.item = C.ItemNumber

#Common - это временная таблица, но остальное для меня не имеет смысла.

Как вы можете иметь два from предложения?

Ответы [ 3 ]

13 голосов
/ 04 ноября 2011

Как видно из документации УДАЛИТЬ , он может принимать два предложения FROM.

Первое FROM:

ОТ: Необязательное ключевое слово, которое можно использовать между ключевым словом DELETE и целевым именем table_or_view_name или rowset_function_limited.

Второй FROM:

FROM <table_source>: указываетдополнительное предложение ОТ.Это расширение Transact-SQL для DELETE позволяет указывать данные и удалять соответствующие строки из таблицы в первом предложении FROM.

Это расширение, задающее соединение, может использоваться вместо подзапроса в предложении WHERE дляидентифицировать строки, которые нужно удалить.

Итак, SQL удалит записи из таблицы Products, имеющие соответствующий элемент, когда он объединен с #common.

Этоэквивалент (по смыслу) следующему запросу:

delete from [GearsDev].[dbo].[Products]
where ItemNumber in
(
  select item from #common
)
2 голосов
/ 04 ноября 2011

Вы можете ограничить набор записей, которые вы хотите удалить, более чем одной таблицей.Второй from просто генерирует псевдоним C для таблицы, из которой вы удаляете, соединяет ее с таблицей #common и удаляет только те записи, которые имеют запись в talbe #common.

1 голос
/ 04 ноября 2011

С MSDN Второй из позволяет создать фильтр, который удаляет соответствующие строки в первом, где они совпадают.

В этом случае удалите все [GearsDev]. [Dbo]. [Products], где ItemNumber имеет соответствующую строку в #Common с элементом того же значения

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