Там должно быть что-то, что я здесь упускаю. У меня есть замечательный оператор Oracle SQL в Toad, который возвращает мне список всех активных сотрудников с нужными мне идентификаторами:
SELECT PERSONNEL.PERSON_ID,
PERSONNEL.NAME_LAST_KEY,
PERSONNEL.NAME_FIRST_KEY,
PA_EID.ALIAS EID,
PA_IDTWO.ALIAS IDTWO,
PA_LIC.ALIAS LICENSENO
FROM PERSONNEL
LEFT JOIN PERSONNEL_ALIAS PA_EID
ON PERSONNEL.PERSON_ID = PA_EID.PERSON_ID
AND PA_EID.PERSONNEL_ALIAS_TYPE_CD = 1086
AND PA_EID.ALIAS_POOL_CD = 3796547
AND PERSONNEL.ACTIVE_IND = 1
LEFT JOIN PERSONNEL_ALIAS PA_IDTWO
ON PERSONNEL.PERSON_ID = PA_IDTWO.PERSON_ID
AND PA_IDTWO.PERSONNEL_ALIAS_TYPE_CD = 3839085
AND PA_IDTWO.ACTIVE_IND = 1
LEFT JOIN PERSONNEL_ALIAS PA_LIC
ON PERSONNEL.PERSON_ID = PA_LIC.PERSON_ID
AND PA_LIC.PERSONNEL_ALIAS_TYPE_CD = 1087
AND PA_LIC.ALIAS_POOL_CD = 683988
AND PA_LIC.ACTIVE_IND = 1
WHERE PERSONNEL.ACTIVE_IND = 1 AND PERSONNEL.PHYSICIAN_IND = 1;
Это работает очень хорошо. Когда я сталкиваюсь с проблемами, я помещаю их в Access. Я знаю, я знаю, Access сосет. Иногда нужно использовать его, особенно если у вас есть несколько типов баз данных, в которых они просто хотят хранить несколько запросов, и , особенно , если босс знает только Access. В любом случае, у меня были проблемы с AND внутри FROM, поэтому я переместил их в WHERE, но по какой-то странной причине Access не выполняет LEFT JOINs, возвращая только персонал с EID, IDTWO и ЛИЦЕНЗЕНЫ. Не у всех есть все три из них.
Лучший выстрел в Access на данный момент:
SELECT PERSONNEL.PERSON_ID,
PERSONNEL.NAME_LAST_KEY,
PERSONNEL.NAME_FIRST_KEY,
PA_EID.ALIAS AS EID,
PA_IDTWO.ALIAS AS ID2,
PA_LIC.ALIAS AS LICENSENO
FROM ((PERSONNEL
LEFT JOIN PERSONNEL_ALIAS AS PA_EID ON PERSONNEL.PERSON_ID=PA_EID.PERSON_ID)
LEFT JOIN PERSONNEL_ALIAS AS PA_IDTWO ON PERSONNEL.PERSON_ID=PA_IDTWO.PERSON_ID)
LEFT JOIN PERSONNEL_ALIAS AS PA_LIC ON PERSONNEL.PERSON_ID=PA_LIC.PERSON_ID
WHERE (((PERSONNEL.ACTIVE_IND)=1)
AND ((PERSONNEL.PHYSICIAN_IND)=1)
AND ((PA_EID.PRSNL_ALIAS_TYPE_CD)=1086)
AND ((PA_EID.ALIAS_POOL_CD)=3796547)
AND ((PA_IDTWO.PRSNL_ALIAS_TYPE_CD)=3839085)
AND ((PA_IDTWO.ACTIVE_IND)=1)
AND ((PA_LIC.PRSNL_ALIAS_TYPE_CD)=1087)
AND ((PA_LIC.ALIAS_POOL_CD)=683988)
AND ((PA_LIC.ACTIVE_IND)=1));
Я думаю, что часть проблемы может заключаться в том, что я использую одну и ту же таблицу псевдонимов (поиска) для всех трех объединений. Может быть, есть более эффективный способ сделать это? Все еще плохо знакомы с SQL, поэтому любые советы по этому вопросу были бы полезны. Я чувствую, что они должны быть эквивалентны, но запрос Toad возвращает мне много десятков тысяч несовершенных строк, а Access дает мне меньше 500. Мне нужно найти всех , чтобы никто не остался в стороне. Это почти как если бы ЛЕВЫЕ СОЕДИНЕНИЯ вообще не работают в Access.