WHERE 句の 1 つにサブクエリを持つ 5 つの SELECT (UNION-ed) で既存のビューを拡張しています。
そのサブクエリで使用されるテーブルは、すべての SELECT ステートメントでアクセスする必要があるため、代わりに JOIN したいと思います (ここで少し調査した後:))。
現在の形はこんな感じ(簡略化)
SELECT DISTINCT
...
FROM
PERSON ,
ADDRESS ,
OWNER ,
OBJECT
WHERE
PERSON.PERSONID = ADDRESS.PERSONID
AND PERSON.PERSONID = OWNER.PERSONID (+)
AND OWNER.OBJECTID = OBJECT.OBJECTID
AND
(
OBJECT.REG_REQUIRED NOT in
(
'Y'
)
OR
(
OBJECT.REG_REQUIRED in ('Y')
AND OWNER.PERSONID || OWNER.OBJECTID IN
(
SELECT
REG.PERSONID || REG.OBJECTID
FROM REGISTRATIONS REG
WHERE APPROVED IN ('Y','V')
)
)
)
結合では、サブクエリに連結があるという事実を考慮する必要があります。
SELECT DISTINCT
...
FROM
PERSON ,
ADDRESS ,
OWNER ,
OBJECT ,
REGISTRATIONS REG
WHERE
PERSON.PERSONID = ADDRESS.PERSONID
AND PERSON.PERSONID = OWNER.PERSONID (+)
AND OWNER.OBJECTID = OBJECT.OBJECTID
AND
(
OBJECT.REG_REQUIRED NOT in
(
'Y'
)
OR
(
OBJECT.REG_REQUIRED in ('Y')
AND (( OWNER.PERSONID || OWNER.OBJECTID = REG.PERSONID || REG.OBJECTID ) AND REG.APPROVED IN ('Y','V'))
)
)
私はこれを正しく行っていますか?