मेरे पास तीन टेबल हैं:

उपयोगकर्ता

id          Username
---------------------------
1     |     John
2     |     Mark

स्थितियां

id          Position          Authority          Department 
---------------------------------------------------------------
1     |     Supervisor    |       3                  4
2     |     Clerk         |       4                  2    
3     |     Supervisor    |       3                  2
4     |     Admin         |       4                  4
5     |     Assistant     |       5                  2

उपयोगकर्ता स्थान

user_id          position_id 
----------------------------
1               |     1 
2               |     3 

तालिकाएँ उपयोगकर्ता और स्थितियाँ UserPositions तालिका का उपयोग करके एक-दूसरे से संबंधित होती हैं, जो उन्हें प्रत्येक तालिका की आईडी (एक विदेशी कुंजी) के माध्यम से जोड़ती हैं।

मैं परिणाम वापस प्राप्त करने का प्रयास कर रहा हूं जिसमें उपयोगकर्ता को असाइन किए गए प्राधिकरण और विभाग से अधिक या उसके बराबर कुछ भी शामिल है। अब तक, मैं इस प्रश्न को हल करने में सक्षम था:

SELECT A.Username, B.Position, B.Authority, B.Department FROM UserPositions C
LEFT JOIN Users A on C.user_id = A.Id
LEFT JOIN Positions B on C.position_id = B.Id

कौन सा रिटर्न:

Username         Position          Authority          Department 
---------------------------------------------------------------
John        |     Supervisor   |      3           |       4
Mark        |     Supervisor   |      3           |       2

हालांकि, मैं उस उपयोगकर्ता के लिए पदों को शामिल करना चाहता हूं जो एक ही विभाग में हैं, लेकिन उस अधिकार से भी अधिक है जिसे उपयोगकर्ता को सौंपा गया था। उदाहरण के लिए, जॉन को पद पर्यवेक्षक सौंपा गया है जो विभाग 4 और प्राधिकरण 3 में है। इसलिए मैं उन सभी पदों की सूची वापस करना चाहता हूं जो विभाग 4 में हैं और जिनके पास 3 या उससे अधिक का अधिकार है और इसे जॉन के बगल में सूचीबद्ध किया गया है। मार्क के लिए वही। इस कदर:

Username         Position          Authority          Department 
---------------------------------------------------------------
John        |     Supervisor   |      3           |       4
John        |     Admin        |      4           |       4
Mark        |     Supervisor   |      3           |       2
Mark        |     Clerk        |      4           |       2
Mark        |     Assistant    |      5           |       2

इस परिणाम को प्राप्त करने के लिए मैं उपरोक्त अपनी क्वेरी को कैसे संशोधित कर सकता हूं?

2
nightmare637 22 पद 2020, 21:45

1 उत्तर

सबसे बढ़िया उत्तर

मुझे लगता है कि यह एक और शामिल है:

select u.username, p1.position, p1.authority, p1.department 
from userpositions   up
inner join users     u  on u.id = up.user_id
inner join positions p  on p.id = up.position_id
inner join positions p1 on p1.department = p.department and p1.authority >= p.authority

टिप्पणियाँ:

  • मैंने left joins को inner join में बदल दिया; आपके समस्या कथन में कुछ भी नहीं इंगित करता है कि आप पूर्व चाहते हैं

  • सार्थक तालिका उपनाम प्रश्नों का अनुसरण करना आसान बनाते हैं

2
GMB 22 पद 2020, 21:53
1
धन्यवाद धन्यवाद धन्यवाद! यह वही था जो मुझे चाहिए था!
 – 
nightmare637
22 पद 2020, 22:04