[英]Oracle to MS-Access SQL:
我試圖將SQL代碼從Oracle復制到Access,以自動創建一些報告。 到目前為止,我已經成功了,但是我遇到了一個麻煩:
這是Oracle SQL:
SELECT DISTINCT o587265.PROJECT_NUMBER AS E587273,
o587265.PROJECT_NAME AS E587274,
o587265.PROJECT_STATUS_CODE AS E587275,
o587265.PROJECT_MANAGER AS E587276
FROM (
SELECT p.segment1 project_number,
p.NAME project_name,
p.project_status_code,
(
SELECT a.FULL_NAME
FROM apps.per_all_people_f a,
apps.pa_project_players_v pm
WHERE a.person_id = pm.person_id
AND pm.project_ID = p.project_ID
AND pm.ROLE = 'Project Manager'
AND a.current_employee_flag = 'Y'
AND a.person_type_id = 1
AND SYSDATE BETWEEN a.effective_start_date
AND a.effective_end_date
AND SYSDATE BETWEEN pm.start_date_active(+)
AND NVL(pm.end_date_active, SYSDATE)
) project_manager
FROM apps.pa_projects_all p
WHERE p.project_status_code != 'CLOSED'
AND p.template_flag = 'N'
AND p.org_ID = 5003
) o587265
ORDER BY o587265.PROJECT_NUMBER ASC,
o587265.PROJECT_NAME ASC,
o587265.PROJECT_MANAGER ASC;
這是我當前的MS-Access版本:
SELECT DISTINCT o587265.PROJECT_NUMBER AS E587273,
o587265.PROJECT_NAME AS E587274,
o587265.PROJECT_STATUS_CODE AS E587275,
o587265.PROJECT_MANAGER AS E587276
FROM (
SELECT p.segment1 AS project_number,
p.NAME AS project_name,
p.project_status_code,
(
SELECT a.FULL_NAME
FROM ((apps_per_all_people_f AS a INNER JOIN apps_pa_project_players_v AS pm ON a.person_id = pm.person_id
) INNER JOIN apps_pa_projects_all AS p ON pm.project_ID = p.project_ID
)
WHERE pm.ROLE = 'Project Manager'
AND a.current_employee_flag = 'Y'
AND a.person_type_id = 1
AND DATE () BETWEEN a.effective_start_date
AND a.effective_end_date
AND DATE () BETWEEN pm.start_date_active
AND IIf(IsNull(pm.end_date_active), DATE (), pm.end_date_active)
) AS PROJECT_MANAGER
FROM apps_pa_projects_all AS p
WHERE p.project_status_code <> 'CLOSED'
AND p.template_flag = 'N'
AND p.org_ID = 5003
) AS o587265
ORDER BY o587265.PROJECT_NUMBER ASC,
o587265.PROJECT_NAME ASC,
o587265.PROJECT_MANAGER ASC;
第一個直接在Oracle 11g(SQL Developer)上運行並可以運行。 MS-Access似乎在子查詢中返回多個行。 我用盡了我的知識,但似乎無法復制它。
我究竟做錯了什么?
另外,Oracle SQL代碼中的這個(+)運算符是什么?
我將這個運算符稱為OUTER(左/右)聯接,但是我從未見過像那樣使用它,而且絕對不是聯接。
有人能幫我嗎?
可能是在Oracle的MS Access顯式INNER JOIN
的隱式INNER JOIN
的轉換中,您在派生表的子查詢的PROJECT_MANAGER列中引用了apps_pa_projects_all表,從而添加了一個附加的INNER JOIN
,從而代替了別名p 。 但是,此子查詢與具有原始別名p的外部FROM
子句的派生表apps_pa_projects_all相關:
考慮刪除第二個INNER JOIN
並返回相關的WHERE
子句條件:
原版的
...
(
SELECT a.FULL_NAME
FROM ((apps_per_all_people_f AS a
INNER JOIN apps_pa_project_players_v AS pm
ON a.person_id = pm.person_id)
INNER JOIN apps_pa_projects_all AS p
ON pm.project_ID = p.project_ID)
WHERE pm.ROLE = 'Project Manager'
AND a.current_employee_flag = 'Y'
...
更改
...
(
SELECT a.FULL_NAME
FROM apps_per_all_people_f AS a
INNER JOIN apps_pa_project_players_v AS pm
ON a.person_id = pm.person_id
WHERE pm.project_ID = p.project_ID
AND pm.ROLE = 'Project Manager'
AND a.current_employee_flag = 'Y'
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.