Учитывая этот пакет SQL:
CREATE TABLE #source
(
ID int,
SourceDescr varchar(255)
)
INSERT INTO #source
VALUES
(1, 'first'),
(2, 'second')
CREATE TABLE #target
(
ID int,
TargetDescr varchar(255)
)
INSERT INTO #target
SELECT * FROM #source
INSERT INTO #target
SELECT * FROM #source S
WHERE NOT EXISTS
(
SELECT 1
FROM #target
WHERE SourceDescr = S.SourceDescr
-- /\ How is this not an error?
)
Почему предложение WHERE
в операторе EXISTS
работает? Конечно, в таблице #target
нет столбца SourceDescr
.
Я даже попробовал это, и это также работает:
INSERT INTO #target
SELECT * FROM #source S
WHERE NOT EXISTS
(
SELECT SourceDescr -- ??
FROM #target
WHERE SourceDescr = S.SourceDescr
)
Чтение официальной документации для EXISTS не прояснило это для меня.
Спасибо.