यह दृष्टिकोण एक संख्या जनरेटर का उपयोग करता है और फिर ओवरलैप की लंबाई का परीक्षण करता है:
select x.drug_name, x2.drug_name, MAX(c.seqnum) as OverlapLen
from x cross join
x x2 cross join
(select ROW_NUMBER() over (order by (select NULL)) seqnum
from INFORMATION_SCHEMA.COLUMNS c
) c
where LEFT(x.drug_name, c.seqnum) = LEFT(x2.drug_name, c.seqnum) and
len(x.drug_name) >= c.seqnum and len(x2.drug_name) >= c.seqnum
group by x.drug_name, x.drug_name
order by x.drug_name, OverlapLen desc
यह मानता है कि information_schema.columns
लंबी दवाओं के नामों के लिए पर्याप्त पंक्तियाँ हैं।
यह जुड़ता है x
खुद के लिए और फिर संख्याओं की सूची में शामिल हो जाता है। where
खंड तीन स्थितियों की जाँच कर रहा है:(1) कि प्रत्येक दवा के नाम का बायाँ भाग seqnum तक समान है; (2) कि प्रत्येक दवा के नाम की लंबाई seqnum से कम या उसके बराबर है।
एकत्रीकरण तब प्रत्येक जोड़ी लेता है और seqnum का उच्चतम मान चुनता है -- यह सबसे लंबा सबस्ट्रिंग मैच होना चाहिए।