Я написал следующий запрос, и он работает:
select * from processed p
inner join data d on d.dataId = p.dataid
where assetid in (select a.assetid from dbo.file f
inner join asset a on a.assetName = f.fileNumber
inner join configMapping c on c.assetId = a.assetid
WHERE p.id in (2,11) and rawConfig = 1)
Однако я понял, что это не должно работать.Запрос должен быть записан как:
select * from processed p
inner join data d on d.dataId = p.dataid
where assetid in (select a.assetid from dbo.file f
inner join asset a on a.assetName = f.fileNumber
inner join configMapping c on c.assetId = a.assetid
WHERE rawConfig = 1)
and p.id in (2,11)
Вложенный запрос ищет только ассемблиды.Кроме того, выполнение вложенного запроса само по себе не будет работать, потому что id
не входит в эти три таблицы:
select a.assetid from dbo.file f
inner join asset a on a.assetName = f.fileNumber
inner join configMapping c on c.assetId = a.assetid
WHERE p.id in (2,11) and rawConfig = 1
Сообщение 207, Уровень 16, Состояние 1, Строка 44
Неверное имя столбца 'id'.
Извиняюсь за то, что не предоставил тестируемые данные для предоставления, но, по сути, вопрос в том, как вложенный запрос первого запроса использует столбец where от своего родителязапрос.Логично, что я думаю, что вложенный запрос потерпит неудачу и, следовательно, весь запрос потерпит неудачу.
Я использую новейшую версию SSMS