समाधान 1:सिद्धांत मूल SQL
इसे प्राप्त करने का एक तरीका मूल MySQL प्रश्नों का उपयोग करना है। इसके लिए सिद्धांत का मूल SQL ResultSetMapping ।
एक मूल SQL क्वेरी को दो बार (विभिन्न मापदंडों के साथ) निष्पादित करते समय मुझे एक समस्या का सामना करना पड़ा, कि दूसरी क्वेरी का परिणाम-सेट पहले वाले के समान था।गिटहब पर निम्नलिखित पोस्ट इसे मेरे लिए हल किया।
समाधान 2 :MySQL के आंतरिक अनुकूलक का उपयोग करना
निम्नलिखित जॉइन कंडीशन का उपयोग करने से MySQL के आंतरिक अनुकूलक का उपयोग होगा और इसे ref_or_null
जॉइन-टाइप
SELECT a.*, b.*
FROM a
INNER JOIN b ON
a.column = b.column
OR (a.column IS NULL AND b.column IS NULL)
तब DQL में इस जॉइन-कंडीशन का उपयोग करना संभव है, जिसे अनुकूलित करने के लिए SQL में अच्छी तरह से अनुवादित किया जाएगा।
समाधान 3:कस्टम DQL फ़ंक्शन लिखें
मैंने एक कस्टम डीक्यूएल-फ़ंक्शन लिखा है जिसका अनुवाद निम्नलिखित खंड में किया गया है:
SELECT a.*, b.*
FROM a
INNER JOIN b ON (a.column <=> b.column) = 1
दुर्भाग्य से = 1
. से छुटकारा पाने में सक्षम नहीं था इस खंड का हिस्सा। यह काम कर गया, लेकिन एक प्रमुख . का कारण बना मेरी क्वेरी पर प्रदर्शन प्रभाव:17s बनाम 0.5s, कुछ (गैर-वैज्ञानिक) संकेत देने के लिए।
इसलिए मैं उस रास्ते से आगे नहीं गया।