2012-01-04 15 views
6

मेरे पास एक सारणी है जिसमें min और max कॉलम हैं। मैं उन पंक्तियों की खोज करना चाहता हूं जहां संख्याओं का एक सेट min और max की सीमा के बीच है।2 कॉलम के बीच संख्याओं का सेट कैसे फ़िल्टर करें?

उदाहरण: मेरे पास (3, 4, 11, 18) सेट है।

  1. मेरे क्वेरी छानने दे सकता है:

    (3 between min and max) OR 
    (4 between min and max) OR 
    (11 between min and max) OR 
    (18 between min and max) 
    
  2. लेकिन मैं अगर वहाँ की तरह एक बेहतर तरीका कुछ है जानना चाहता था:

    (3,4,11,12) between min and max 
    

    कि # 1

    के समान हो जाएगा

मुझे थाई की आवश्यकता है एस क्योंकि अलग-अलग खोजों के बीच सेट बदल सकता है। किसी भी मदद या सुझाव की सराहना की जाती है।

सरल संदर्भ में तालिका कक्षा (वर्गीकृत, वर्गनाम, खनन, अधिकतम) है। हजारों कक्षाएं हैं - इसलिए मुझे उम्र के विशिष्ट सेट के साथ कक्षाओं की खोज करने के लिए वेब अनुरोध मिलता है (3,4,11,12) जहां उपयोगकर्ता 3, 4, 11 और 12 के लिए कक्षाओं की खोज कर रहा है।

वर्तमान में अपनी क्वेरी दिखता है: चयन * वर्ग से जहां ((न्यूनतम और अधिकतम के बीच 3) या (न्यूनतम और अधिकतम) या (न्यूनतम और अधिकतम के बीच 11) या (18 न्यूनतम और अधिकतम) के बीच के बीच 4) ​​

+0

क्या आप संख्याओं का अपना सेट अस्थायी तालिका में डाल सकते हैं, और उस श्रेणी में अपनी उचित सीमा के साथ उस वर्ग में शामिल हो सकते हैं? –

+1

क्या आप तालिका संरचना और उदाहरणों को पोस्ट कर सकते हैं जो आप वास्तव में चाहते हैं? – Benoit

+1

आरडब्ल्यूटीएफ कॉलम 'मिनट' और 'अधिकतम' नामकरण कर रहा है। यह केवल सायन पाठकों को भ्रमित करेगा। आप जो करना चाहते हैं उसे चित्रित करने के लिए कृपया अपनी तालिका परिभाषा और डेटा का एक स्निपेट जोड़ें। – wildplasser

उत्तर

0

हम यदि आप अपनी टेबल स्कीमा पोस्ट करके अधिक जानकारी जोड़ सकते हैं तो आप और अधिक मदद कर पाएंगे। हालांकि, यह नमूना क्वेरी आपको कुछ संकेत दे सकती है।

नमूना प्रश्न:

SELECT SampleValue, ColB, ColC FROM TableName WHERE SampleValue in (1,2,3)

+0

मेरे पास है मेरी मेज का नमूना देने के लिए मेरी पोस्ट संपादित की। नमूना वैल्यू यहाँ क्या है? – chan

2

कुछ

तरह
SELECT * 
    FROM MyTable AS T 
WHERE EXISTS (
       SELECT * 
       FROM MySet AS S 
       WHERE S.val BETWEEN T.my_min AND T.my_max 
      ); 
+0

प्रतिक्रिया के लिए धन्यवाद और यह अच्छा लग रहा है लेकिन मैं माइसेट कैसे बना सकता हूं? क्या यह क्वेरी के हिस्से के रूप में किया जा सकता है? – chan

0

एक और तरीका है पहले एक तालिका बनाने के (एक बार) और सभी संभव उम्र के साथ इसे भरने (1 से 101 के लिए) के लिए होगा :

CREATE TABLE Age 
(allowed TINYINT 
, PRIMARY KEY (allowed) 
) ; 

INSERT INTO Age 
    VALUES 
    (1), (2), (3), ... (101) ; 

अपनी खोज क्वेरी में इसका उपयोग करें:

SELECT * 
FROM Class 
WHERE EXISTS 
     (SELECT * 
     FROM Age 
     WHERE Age.allowed BETWEEN Class.minage AND Class.maxage 
      AND Age.allowed IN (3, 4, 11, 18) 
    ) 
+0

नहीं, मैं एक टेबल नहीं बना सकता जब तक कि यह किसी क्वेरी के भीतर नहीं किया जा सकता। – chan

संबंधित मुद्दे