यह आपके डेटा को सामान्य बनाने के महत्व का एक और उदाहरण है।
एक कॉलम में एकाधिक डेटा बिंदुओं को रखना लगभग कभी भी सही डिज़ाइन नहीं होता है, और लगभग कभी भी मेरा मतलब लगभग 99.9999% नहीं होता है।
यदि आप अपने डेटाबेस को सामान्य नहीं कर सकते हैं, तो आप इस तरह के समाधान का उपयोग कर सकते हैं:
SELECT *
FROM Projects p
WHERE EXISTS (
SELECT Project_ID
FROM Feedback F WHERE ID = 268
AND Project_ID IS NOT NULL
AND ';'+ F.Project_ID +';' LIKE '%;'+ CAST(p.Project_ID as varchar) +';%'
)
आप IN
. का उपयोग नहीं कर सकते ऑपरेटर क्योंकि यह अल्पविराम द्वारा सीमित मूल्यों की एक सूची की अपेक्षा कर रहा है, जबकि आप इसे एक एकल मान के साथ आपूर्ति करने का प्रयास करते हैं जो अर्धविराम द्वारा सीमित है। भले ही Project_ID में मानों को अल्पविराम द्वारा सीमित कर दिया गया हो, फिर भी यह काम नहीं करेगा।
मेरे द्वारा ;
जोड़ने का कारण Project_ID
. के हर तरफ दोनों तालिकाओं में यह है कि इस तरह LIKE
ऑपरेटर true
लौटाएगा किसी भी स्थान के लिए यह Projects.Project_Id
. ढूंढता है Feedback.Project_Id
. के अंदर . आपको ;
जोड़ना होगा Projects.Project_Id
. पर LIKE
. को रोकने के लिए true
लौटाने के लिए जब आप एक संख्या की तलाश कर रहे हैं जो सीमांकित स्ट्रिंग में संख्याओं के लिए आंशिक मिलान है। 1;112;455 वाली स्ट्रिंग में 12 खोजने पर विचार करें - खोज मान (इस उदाहरण में 12) में सीमांकक जोड़े बिना LIKE
ऑपरेटर true
लौटाएगा ।