मैं एक कर्मचारी बुकिंग आवेदन पर काम कर रहा हूं। मेरे पास दो अलग-अलग इकाइयां प्रोजेक्ट्स और उपयोगकर्ता हैं जिन्हें दोनों ने कौशल की एक चर संख्या निर्दिष्ट की है।SQL सर्वर 2008 में दो परिणामों में मानों का मिलान/तुलना कैसे करें?
मैं विभिन्न कौशल के साथ एक कौशल तालिका मिल गया है (स्तंभों: आईडी, नाम) मैं एक मेज कहा जाता UserSkills में उपयोगकर्ता कौशल रजिस्टर (दो विदेशी कुंजी कॉलम के साथ: fk_user और fk_skill) मैं परियोजना कौशल रजिस्टर ProjectSkills नामक एक और तालिका में (दो विदेशी कुंजी कॉलम के साथ: fk_project और fk_skill)।
एक परियोजना के लिए अपने कौशल को स्थापित करने के दौरान 6 अलग-अलग कौशल और उपयोगकर्ताओं की आवश्यकता हो सकती है।
मुश्किल हिस्सा तब होता है जब मुझे अपने कौशल के आधार पर अपने प्रोजेक्ट के लिए उपयोगकर्ताओं को ढूंढना होता है। मुझे केवल उन उपयोगकर्ताओं में रूचि है जो मिलते हैं जिनके पास परियोजना द्वारा आवश्यक सभी कौशल हैं। उपयोगकर्ताओं को आवश्यक होने के बाद अधिक कुशल होने की अनुमति है।
निम्नलिखित कोड काम करेंगे नहीं, (और यहां तक कि अगर यह किया था, बहुत प्रदर्शन अनुकूल नहीं होगा), लेकिन यह मेरा विचार दिखाता है:
SELECT * FROM Users u WHERE
(SELECT us.fk_skill FROM UserSkills us WHERE us.fk_user = u.id)
>=
(SELECT ps.fk_skill FROM ProjectSkills ps WHERE ps.fk_project = [some_id])
मैं अपने खुद के समारोह बनाने कि लेता है के बारे में सोच रहा हूँ दो टेबल-वेरिएबल्स, और उसके बाद तुलना में काम कर रहे हैं (एक संशोधित इन-फ़ंक्शन की तरह), लेकिन मुझे एक ऐसा समाधान मिल जाएगा जो अधिक प्रदर्शन अनुकूल है।
मैं एसक्यूएल सर्वर 2008
मैं वास्तव में इस पर किसी भी विचार या सुझाव की सराहना करते हैं पर विकसित कर रहा हूँ। धन्यवाद!
OMG! आपने केवल 2½ मिनट के बाद सही उत्तर के साथ जवाब दिया! आप मेरे हीरो हैं! ;) यह स्टैक ओवरफ्लो पर मेरा पहला सवाल था, लेकिन निश्चित रूप से मेरा आखिरी नहीं ... धन्यवाद, आपकी मदद बहुत सराहना की है! –
ज़ॉउंड्स। क्या ऐसी कोई वेबसाइट है जो सहसंबंधित सबक्वायरी के इस उपयोग के पीछे कैसे और क्या स्पष्ट करती है? –
'@ फिलिप केली ': मैं वर्तमान में अलग-अलग' आरडीबीएमएस 'में' बाएं जॉइन/आईएस नल 'बनाम' नहीं 'बनाम' नहीं 'बनाम' नहीं 'पर लेखों की एक श्रृंखला लिख रहा हूं। – Quassnoi