Запрос Access 2007 неправильно возвращает ноль записей - PullRequest
2 голосов
/ 19 июля 2011

У меня есть небольшая база данных в Access, которая работает хорошо, за исключением следующей проблемы.База данных разработана правильно, и все остальные 100 запросов у меня работают нормально.Я пытаюсь найти правильный SQL, чтобы вернуть правильные записи.Определенно есть записи, которые соответствуют (((tblComorbidity.comorbidityexplanation) = "инфекция" И (tblComorbidity.comorbidityexplanation) = "пролежни"));часть, но почему-то ничего не возвращает.Какие-либо предложения?Спасибо

    SELECT DISTINCT Person.PersonID, tblComorbidity.comorbidityexplanation
    FROM 
tblKentuckyCounties INNER JOIN 
(tblComorbidity INNER JOIN (Person INNER JOIN tblComorbidityPerson ON Person.PersonID = tblComorbidityPerson.personID) ON tblComorbidity.ID = tblComorbidityPerson.comorbidityFK) ON tblKentuckyCounties.ID = Person.County
    WHERE 
(((tblComorbidity.comorbidityexplanation)="infection" And (tblComorbidity.comorbidityexplanation)="pressure sores"));

Ответы [ 3 ]

6 голосов
/ 19 июля 2011

Ваш SQL пытается получить все записи tblComorbidity, в которых есть объяснение «заражение» И «пролежни». Это невозможно, поскольку у ОДНОЙ записи tblComorbidity есть только ОДНО объяснение.

Что (я думаю, что) вы действительно хотите, чтобы получить всех лиц, для которых существует ОДНА запись tblComorbidity с объяснением = «инфекция» и ДРУГАЯ запись tblComorbidity с объяснением = «пролежни». Это звучит похоже, но это что-то другое, и это нужно делать по-другому.

Что-то вроде следующего SQL должно делать то, что вы хотите:

SELECT DISTINCT Person.PersonID
  FROM ((((Person INNER JOIN tblComorbidityPerson AS InfPers ON Person.PersonID = InfPers.PersonID)
          INNER JOIN tblComorbidity AS Inf ON InfPers.comorbidityFK = Inf.ID)
         INNER JOIN  tblComorbidityPerson AS SorePers ON Person.PersonID = SorePers.PersonID)
        INNER JOIN tblComorbidity AS Sore ON SorePers.comorbidityFK = Sore.ID)
       INNER JOIN tblKentuckyCounties ON tblKentuckyCounties.ID = Person.County
 WHERE Inf.comorbidityexplanation = "infection"
   AND Sore.comorbidityexplanation = "pressure sores";

Обычно вам нужно присоединиться к сопутствующей патологии дважды (один раз для каждого объяснения).

3 голосов
/ 19 июля 2011
(((tblComorbidity.comorbidityexplanation)="infection" OR (tblComorbidity.comorbidityexplanation)="pressure sores"));

Вам нужно ИЛИ здесь, а не И.tblComorbidity.comorbidityexplanation не может быть двумя разными значениями одновременно.

2 голосов
/ 19 июля 2011

Cularis находится на правильном пути. После предложения where необходимо добавить

GROUP BY Person.PersonID
HAVING count(*) = 2

Это сгруппирует записи в дочерних таблицах по человеку и убедится, что количество равно 2 (один для «инфекции» и один для «пролежней»).

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