고객 및 공급 업체를위한 프로젝트 목록을 반환하는보기가 있습니다.합집합을 사용하여 분기 SQL 쿼리
CREATE OR REPLACE VIEW projects_list AS
SELECT pr.*,
c.customer_name as party_name,
null as vendor_id,
null as vendor_data
FROM projects pr
JOIN customers c on (pr.customer_id = c.customer_id)
UNION ALL
SELECT pr.*,
v.vendor_name as party_name,
v.vendor_id,
v.some_column as vendor_data
FROM projects pr
JOIN projects_of_vendors pov on (pr.project_id = pov.project_id)
JOIN vendors v on (pov.vendor_id = v.vendor_id)
기본적으로 나는이보기를 사용하여 고객 또는 공급 업체를위한 프로젝트 목록을 가져오고 둘 다 동시에 가져올 수 없습니다. 그래서,보기 중 하나로 쿼리 :
또는
SELECT * FROM projects_list
WHERE vendor_id = 'A_VENDOR';
그래서 basicly 내가 더 VENDOR_ID 세트 또는 두 번째 부분이없는 경우 노동 조합의 첫 번째 부분 중 하나를 실행하고자하는 - 경우 vendor_id가 설정되었습니다.
문제점은 고객으로보기에 액세스 할 때 오라클이 불필요 할 때 오라클이 "공급 업체 branck"을 확인하는 데 오랜 시간을 소비하고 쿼리가 느려지 게된다는 것입니다.
이제이보기를 2 개로 분할하고 매번 다른보기를 선택할 수 있습니다. 그러나 실제로 나는 이것에 의존하는 많은 견해를 가지고 있으며 나는이 것을 직접적으로 접근하지 않는다. "자식"뷰 각각을 복제하고이 변경을 위해 애플리케이션 코드를 많이 변경해야합니다.
노어가 노조의 첫 번째 또는 두 번째 지점을 건너 뛰는 것을 "암시 할 수있는 방법이 있습니까?
당신은 당신의 선택 열 이름을 명시 적으로 고려하실 수 있습니다 사용합니다. 작업을 마쳤 으면 각 유니언에 'V'및 'C'와 같은 추가 상수 열을 추가 한 다음 명시 적으로 선택하십시오. - 도움이 되나요? –
감사합니다. – SWilk
답장으로 붙여 드리겠습니다. –