बाएं बाहरी जोड़ के लिए समूह के रूप में डमी पंक्ति दिखाएं
मेरे पास 3 टेबल हैं कंपनी, विभाग और कर्मचारी। अब मैं उन सभी कर्मचारियों का पता लगाना चाहता हूं जो कंपनी डी के तहत कंपनी ए में काम करते हैं और किसी भी विभाग को देखने के लिए आंतरिक और साथ ही बाहरी बाहरी डेटा को प्रदर्शित करना चाहते हैं, जिसमें कोई भी कर्मचारी और कंपनी नहीं है जिसके पास कोई विभाग नहीं है।
इस सभी तालिकाओं के बीच मूल संबंध है
**TABLE COMPANY**
COMPANY_NAME COMPANY ID
C1 COMP1
C2 COMP2
C3 COMP3
**TABLE DEPARTMENT**
DEPARTMENT_NAME COMPANY_NAME
D1 C1
D2 C1
D3 C2
**TABLE EMPLOYEE**
EMPLOYEE_ID DEPARTMENT_NAME
E1 D1
E2 D1
E3 D1
E4 D2
E5 D2
Company -- > Department --- > Employee.
मैं प्रत्येक कॉलम के खिलाफ डमी कॉलम के रूप में इकाई प्रदर्शित करना चाहता हूं।
ENTITY COMPANY_NAME DEPARTMENT_NAME EMPLOYEE_ID
COMPANY C1 - -
DEPARTMENT C1 D1
EMPLOYEE C1 D1 E1
EMPLOYEE C1 D1 E2
EMPLOYEE C1 D1 E3
DEPARTMENT C1 D2 -
EMPLOYEE C1 D2 E4
EMPLOYEE C1 D2 E5
COMPANY C2 - -
DEPARTMENT C2 D3 -
COMPANY C3 - -
जवाब
आप SETऑपरेटर का उपयोग इस UNION ALLप्रकार कर सकते हैं :
SELECT 'COMPANY' AS ENTITY,
COMPANY_NAME,
'-' AS DEPARTMENT_NAME,
'-' AS EMPLOYEE_ID
FROM COMPANY C
UNION ALL
SELECT 'DEPARTMENT' AS ENTITY,
C.COMPANY_NAME,
D.DEPARTMENT_NAME,
'-' AS EMPLOYEE_ID
FROM DEPARTMENT D
JOIN COMPANY C ON C.COMPANY_ID = D.COMPANY_ID
UNION ALL
SELECT 'EMPLOYEE' AS ENTITY,
C.COMPANY_NAME,
D.DEPARTMENT_NAME,
E.EMPLOYEE_ID
FROM DEPARTMENT D
JOIN COMPANY C ON C.COMPANY_ID = D.COMPANY_ID
JOIN EMPLOYEE E ON E.DEPARTMENT_NAME = D.DEPARTMENT_NAME
ORDER BY COMPANY_NAME,
CASE WHEN DEPARTMENT_NAME = '-' THEN 1 ELSE 2 END,
DEPARTMENT_NAME,
CASE WHEN EMPLOYEE_ID = '-' THEN 1 ELSE 2 END,
EMPLOYEE_ID
कृपया इसे आज़माएँ:
select
case entity_disp
when 1 then 'COMPANY'
when 2 then 'DEPARTMENT'
when 3 then 'EMPLOYEE'
end as entity,
company_name,
department_name,
employee_id
from
(select
c.company_name,
d.department_name,
e.employee_id,
1 + decode(d.department_name, null, 0, 1) + decode(e.employee_id, null, 0, 1) as entity_disp
from
company c
left outer join department d on (d.company_name = c.company_name)
left outer join employee e on (e.department_name = d.department_name)
) c
order by c.entity_disp
इस बात पर ध्यान दें कि योर टैबेल मॉडल के अनुसार यह ऐसा दिखता है कि कंपनी और विभाग के टैब कंपनी_नाम के आधार पर जुड़ गए हैं। इसके अलावा विभाग और कर्मचारी टेबल विभाग_नाम पर आधारित हैं। यह चयन कैसे कार्यान्वित किया जाता है। यदि आवश्यक हो - rework उचित संबंधपरक कॉलम के साथ जुड़ता है।