2011-01-18 14 views
41

SQL इन क्लॉज में 1000 से अधिक आइटम डालना संभव है? हमें अपने ओरेकल डेटाबेस के साथ समस्याएं मिल रही हैं जो इसे संभालने में सक्षम नहीं हैं।एसक्यूएल इन क्लॉज 1000 आइटम सीमा

यदि हां, तो हम SQL इन क्लॉज में 1000 से अधिक आइटम कैसे डाल सकते हैं?

यदि नहीं, तो मैं और क्या कर सकता हूं?

+5

के संभावित डुप्लिकेट [Oracle SQL: कैसे एक में खंड के अंदर 1000 से अधिक आइटम का उपयोग करने के] (http://stackoverflow.com/questions/2401066/oracle-sql-how 1000 से अधिक आइटम-इन-इन-क्लॉज-टू-इन-क्लॉज) –

+2

डुप्लिकेट होने के अलावा, मैं आपको यह बताने के लिए चाहता हूं कि खंड सीमा में कारण है। यह एक अत्यंत संसाधन गहन सवाल है। आपको जो करना चाहिए वह @ जोनाथन ने उल्लेख किया है। –

+1

संभावित डुप्लिकेट [1000 से अधिक मानों को ओरेकल इन क्लॉज में कैसे रखा जाए] (http://stackoverflow.com/questions/400255/how-to-put-more-than-1000-values-into-an-oracle -इन-क्लॉज) –

उत्तर

52

आपको इन क्लॉज को INNER जॉइन क्लॉज में बदलना चाहिए।

आप इस एक दूसरे की तरह एक प्रश्न में यह एक

SELECT foo 
FROM bar 
WHERE bar.stuff IN 
     (SELECT stuff FROM asdf) 

की तरह एक प्रश्न बदल सकता है।

SELECT b.foo 
FROM ( 
     SELECT DISTINCT stuff 
     FROM asdf) a 
JOIN bar b 
ON  b.stuff = a.stuff 

तुम भी प्रदर्शन का एक बहुत लाभ होगा

+1

अंतर्दृष्टि के लिए +1 – Jeune

70

इस कि अन्य उत्तर (या अन्य प्रश्नों का उत्तर दिया) में से किसी में नहीं दिया गया है के लिए एक और वैकल्पिक हल है:

की तरह बयान में किसी भी x in (1,2,3) को (1,x) in ((1,1), (1,2), (1,3)) के रूप में फिर से लिखा जा सकता है और 1000 तत्व सीमा अब लागू नहीं होगी। मैंने x पर एक इंडेक्स के साथ परीक्षण किया है और योजना की व्याख्या अभी भी रिपोर्ट की है कि ओरेकल एक एक्सेस अनुमान और रेंज स्कैन का उपयोग कर रहा है।

+0

+1 कूल चाल :) - 10,001 तत्वों के साथ परीक्षण - प्रदर्शन को लगता है कि –

+0

हालांकि ऐसा नहीं लगता था, कूल चाल – PoX

+0

मेरा पसंदीदा उत्तर! – TrojanName

0

एक और तरीका है:

SELECT COL1, COL2, COL3 FROM YOUR_TABLE 
WHERE 1=1 
AND COL2 IN (
SELECT VAL1 as FAKE FROM DUAL 
UNION 
SELECT VAL2 as FAKE FROM DUAL 
UNION 
SELECT VAL3 as FAKE FROM DUAL 
--... 
) 
+0

आपको उन दोनों के बजाय 'यूनियन' और 'VALUES' कन्स्ट्रक्टर के बजाय 'यूनियन ऑल' का उपयोग करना चाहिए। – Hogan

2

हम एक से अधिक हो सकता है एक ही चर के लिए बयान "में"।

पूर्व के लिए:

select val 
from table 
where val in (1,2,3,...) 
or 
val in (7,8,9,....) 
संबंधित मुद्दे