चूंकि यह धागा मेरे लिए बहुत उपयोगी था, मैंने सोचा कि मैं अपना समाधान साझा करूंगा।
मुझे एक समान समस्या थी, शायद इस विशिष्ट एकल-सेट तुलना से अधिक आम तौर पर लागू होती है। मैं उस तत्व की आईडी को खोजने का प्रयास कर रहा था जिसमें बहु-तत्व बाल तत्वों का एक सेट था जो बहु-तत्व वस्तुओं के एक क्वेरी सेट से मेल खाता था।
प्रासंगिक स्कीमा जानकारी है:
table events, pk id
table solutions, pk id, fk event_id -> events
table solution_sources, fk solutionid -> solutions
columns unitsourceid, alpha
क्वेरी: आईडी 110 solution_sources कि ss_tmp में (unitsourceid, अल्फा) के सेट से मिलान के सेट है कि के साथ घटना के लिए समाधान खोजने के। (यह भी tmp तालिका के बिना किया जा सकता है, मेरा मानना है कि।)
समाधान:
with solutionids as (
select y.solutionid from (
select ss.solutionid, count(ss.solutionid) x
from solutions s, solution_sources ss
where s.event_id = 110 and ss.solutionid = s.id
group by ss.solutionid
) y where y.x = (select count(*) from ss_tmp)
)
select solutionids.solutionid from solutionids where
(
select case
when count(*) = (select count(*) from ss_tmp) then true
else false
end
from
(SELECT unitsourceid, alpha FROM solution_sources
where solutionid = solutionids.solutionid
INTERSECT
SELECT unitsourceid, alpha FROM ss_tmp) x
)
4 मदों की एक परीक्षण क्वेरी और एक परीक्षण db कि एक मिलान समाधान था (बच्चे की एक ही नंबर के खिलाफ परीक्षण किया गया तत्व, प्रत्येक मिलान किए गए), कई पूरी तरह गैर-मिलान समाधान, और 1 समाधान जिसमें 3 मिलान करने वाले बच्चे तत्व थे, 1 समाधान जिसमें सभी 4 मिलान करने वाले बच्चे तत्व थे, साथ ही एक अतिरिक्त बच्चा, और 1 समाधान जिसमें 4 बच्चे तत्व थे जिनमें से 3 4 मिलान की क्वेरी से। केवल सच्चे मैच की आईडी वापस कर दी गई थी।
बहुत बहुत शुक्रिया -Linus
आप के लिए ** दूसरे को काट नहीं करना चाहते हैं ** उन्हें? –
बीटीडब्ल्यू, यदि आपको सेट * संग्रह * के भीतर मिलान सेट के लिए ** खोज ** की आवश्यकता है, तो यह एक अलग समस्या है, और यहां समाधान बहुत मदद नहीं कर सकते हैं। –