Помогите разобраться с SQL запросом:
Если коротко - в запросе можно делать select ... select ... select. То есть можно делать запрос на запросе на запросе?
Если подробно - VB6.0 Sp6, база файл mdb. Построили запрос. Вроде все правильно, но ругается "ошибка синтаксиса в операции JOIN".
В чем дело? Просто ошиблись где-то или нельзя столько вложенных запросов делать?
Сам запрос:
SELECT q1.fNT, q1.fDolg FROM ([SELECT tblNT.fNT, tblDolg.fKodUpload, tblDolg.fDolg FROM tblNT INNER JOIN tblDolg ON tblNT.fNT = tblDolg.fNT Where tblDolg.fKodUpload = 22] . as INNER JOIN [SELECT tblNT.fNT, q21.fNT FROM tblNT LEFT JOIN [SELECT tblRing.fNT, tblRing.fRingResult, tblRing.fSO, tblRing.fRingDateTime1 FROM tblRing WHERE tblRing.fRingResult Like '__________1___' AND tblRing.fSO='1' AND tblRing.fRingDateTime1>=#5/1/2005# And tblRing.fRingDateTime1<=#5/31/2005#]. AS q21 ON tblNT.fNT =q21.fNT WHERE q21.fNT Is Null ] . as ON q1.fNT = q2.tblNT.fNT) INNER JOIN [ SELECT tblNT.fNT, Last(tblRing.fRingResult) AS [Last-fRingResult], tblRing.fSO, Last(tblRing.fRingDateTime1) AS [Last-fRingDateTime1] FROM tblNT LEFT JOIN tblRing ON tblNT.fNT = tblRing.fNT GROUP BY tblNT.fNT, tblRing.fSO HAVING Last(tblRing.fRingDateTime1)<#5/24/2005 10:30:0#] . as q3 ON q2.tblNT.fNT = q3.fNT ORDER BY q1.fDolg DESC
Запрос состоит из трех вложенных. Каждый вложенный по отдельности работает. Все вместе нет. Отбираем все записи которые есть в каждом из трех. Второй вложенный запрос тоже имеет свой внутренний запрос. Без него может и надо но мозгов не хватает обойтись одним. Там отбираем записи которые или удовлетворяют условию, или если в связной таблице нет записей.
И еще - в чем смысл квадратных скобок включающих запрос и точки после внутреннего запроса?
Спасибо.