मुझे MySQL क्वेरी के बारे में एक प्रश्न मिला।

मेरे पास एक टेबल role और दूसरी टेबल context है। प्रत्येक भूमिका को एक जॉइन टेबल role_context का उपयोग करके कई संदर्भों से जोड़ा जा सकता है। उदाहरण:

roleA->context1
roleA->context2
roleB->context1

मैं उन सभी भूमिकाओं को प्राप्त करने के लिए एक प्रश्न चाहता हूं जो मेरे द्वारा दिए गए सभी संदर्भों से मेल खाते हों। उदाहरण:

  • यदि मेरे पास पैरामीटर में ['context1'] है तो मैं परिणाम में ['roleA', 'roleB'] चाहता हूं।
  • अगर मेरे पास पैरामीटर में ['context2'] है तो मुझे परिणाम में ['roleA'] चाहिए।
  • यदि मेरे पास पैरामीटर में ['context1', 'context2'] है, तो मुझे परिणाम में ['roleA'] चाहिए।

मैंने उपयोग करने की कोशिश की है

SELECT *
FROM role_context
INNER JOIN context ON role_context.context_name = context.name
WHERE context.name IN ["ETT","FR"]

लेकिन जैसे यह मेरी तीसरी शर्त के लिए इसमें वापसी roleA और roleB है।

क्या किसी के पास इस प्रश्न के लिए कोई विचार है? या शायद मेरा SQL आर्किटेक्चर अच्छा नहीं है?

0
GrenierJ 26 नवम्बर 2019, 17:57

1 उत्तर

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

आर्किटेक्चर ठीक है, बस SQL ​​में ऐसे कार्यों के लिए बिल्ट-इन ऑपरेटर्स नहीं हैं। आप निम्न क्वेरी का उपयोग उन भूमिकाओं का चयन करने के लिए कर सकते हैं जिनमें दी गई सूची में सभी संदर्भ हैं (IN खंड के रूप में पारित किया जाना चाहिए):

SELECT role_context.role_name
FROM role_context
JOIN context ON role_context.context_name = context.name
WHERE context.name IN ('context1', 'context2')
GROUP BY role_context.role_name
HAVING COUNT(context.name) = 2 -- here 2 corresponds to the number of items in the above list
1
Salman A 26 नवम्बर 2019, 22:07