【发布时间】:2011-10-03 21:47:05
【问题描述】:
这里一定有我遗漏的东西。我在 Toad 中有一个漂亮、漂亮的 Oracle SQL 语句,它会返回一个包含我想要的 ID 的所有在职人员的列表:
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。无论如何,我在使用 FROM 中的 AND 时遇到了问题,所以我将它们移到了 WHERE,但出于某种奇怪的原因,Access 没有进行 LEFT JOIN,仅返回那些具有 EID 的人员, IDTWO 和 LICENSENO 的。不是每个人都具备这三个条件。
到目前为止,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 行。我需要找到每个人,这样没有人会被遗漏.几乎就好像 LEFT JOIN 在 Access 中根本不起作用。
【问题讨论】:
标签: sql oracle ms-access left-join jet