Нет ошибки текущей записи в MS Access 2010 при использовании самостоятельного соединения - PullRequest
0 голосов
/ 15 ноября 2011

Я заменяю подзапрос самостоятельным соединением, чтобы повысить производительность моего запроса.

Старый подзапрос был таким:

(SELECT fage2.agecat 
 FROM   people AS fage2 
 WHERE  fage2.aacode = people.aacode 
       AND fage2.persno = 2) AS RAge2,

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

(SELECT [People].[AgeCat] 
FROM   [People] 
       INNER JOIN [People] AS p2 
         ON [People].[aacode] = [P2].[aacode] 
WHERE  [P2].[PERSNO] = 2 ) AS RAge2,

, но возвращает сообщение об ошибке «Нет текущей записи».

Цель состоит в том, чтобы найти запись, которая имеет такой же код, но имеет номер PERSNO 2 и вернуть AgeCat для этой записи в столбце с именем RAge2,

Это только часть более крупного запроса, который объясняется полностью Преобразование подзапроса SQL в объединение при просмотре другой записи в той же таблице Access 2010

Ответы [ 2 ]

0 голосов
/ 15 ноября 2011

Huum, похоже, что этот запрос, который вы хотите оптимизировать, является частью более крупного запроса, и он важен для вопроса, который вы публикуете для всего запроса, чтобы он помог понять вашу проблему ...

Кроме того, из того, что я вижу, вы будете показывать RAge2 для обеих строк с одним и тем же AACode, а не только с тем, у которого Persno = 2, как вы сказали на цели.Вставка всего вашего запроса также поможет понять это.

Я пытался понять ваш запрос, поэтому я создал поддельный запрос для вашего исходного запроса:

SELECT
(SELECT FAge2.AgeCat
 FROM People AS FAge2
 WHERE FAge2.aacode = People.aacode 
   AND FAge2.PERSNO = 2) AS RAge2,
People.PersonId
FROM People

Чтобы получить те же результаты, вам понадобится левое соединение, а не внутреннее соединение, поскольку запрос с подзапросом не исключает результаты из внешней таблицы, поэтому в результате запроса на соединение у вас будет что-то вроде этого:

SELECT 
 FAge2.AgeCat as RAge2,
 People.PersonID,
FROM People
Left JOIN People AS FAge2 ON (FAge2.aacode = People.aacode AND FAge2.PERSNO = 2)
0 голосов
/ 15 ноября 2011

Пожалуйста, используйте:

(SELECT [People].[AgeCat] FROM [People] INNER JOIN [People] AS P2 ON ([People].[aacode] = [P2].[aacode] AND [P2].[PERSNO] = 2)) AS RAge2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...