2009-07-13 19 views

उत्तर

153
SELECT * FROM table 
ORDER BY NEWID() 
+43

MySQL के लिए 'ORDER BY uuid() 'का उपयोग करें। (... इस पृष्ठ पर आने वाले लोगों के लिए एक सामान्य खोज के माध्यम से, मेरे जैसे!) –

+1

यह काम करता है, लेकिन तालिका (मैं 14 एम + पंक्तियों) से चयन कर रहा हूं उस पर बहुत धीमी है। क्या इसकी उम्मीद की जा सकती है? AFAIK, तालिका ठीक से अनुक्रमित है। –

+4

@ जॉन - आप 14 मिलियन रिकॉर्ड चुन रहे हैं और एक अद्वितीय पहचानकर्ता द्वारा उत्पन्न और आदेश दे रहे हैं। शायद आप केवल एक यादृच्छिक पंक्ति के बाद ही हैं? इस मामले में, NEWID द्वारा तालिका ऑर्डर से शीर्ष 1 चुनें() –

18

यह सबसे सरल उपाय है। This one एक बेहतर समाधान है।

+10

सुंदर लगता है कि काम नहीं करता। ऑर्डर द्वारा ऑर्डर में रैंड() केवल एक बार गणना की जाती है, इसलिए आप प्राकृतिक आदेश के साथ समाप्त होते हैं। इसका परीक्षण करने के लिए, रैंड(), 1 द्वारा ऑर्डर करें और आपको पहले कॉलम (कम से कम SQL सर्वर 2005 में) द्वारा ऑर्डर किए गए अपने उद्धरणों की एक सूची प्राप्त होगी। –

+0

एचएम, मुझे यकीन है कि यह अतीत में मेरे लिए काम करता है, शायद यह आपके द्वारा उपयोग किए जाने वाले उत्पाद पर निर्भर करता है। –

+0

ऐसा नहीं लगता है कि यह एमएस एसक्यूएल पर काम करता है। –

11

सामान्य विधि NEWID() फ़ंक्शन का उपयोग करना है, जो एक अद्वितीय GUID उत्पन्न करता है। तो,

SELECT * FROM dbo.Foo ORDER BY NEWID(); 
+0

स्पष्ट विकल्प, रैंड() फ़ंक्शन सीधे काम नहीं करता है, लेकिन यहां एक वर्कअराउंड है: http://weblogs.sqlteam.com/jeffs/archive/2004/11/22/2927.aspx – devstuff

+0

+1 यह काम करता है, लेकिन डेव बार्कर तेज था :) –

0

कुशल और यादृच्छिक होने के लिए, दो अलग-अलग प्रश्न होने के लिए सबसे अच्छा हो सकता है।

कुछ की तरह ...

तालिका

फिर से चयन table_id, अपने चुने हुए भाषा में, एक यादृच्छिक आईडी लेने तो उस पंक्ति के डेटा खींच।

चुनें * मेज से कहां table_id = $ rand_id

लेकिन वह वास्तव में एक अच्छा विचार आप तालिका में पंक्तियों की बहुत सारी करने के लिए उम्मीद कर रहे हैं अगर नहीं है। यदि आप यादृच्छिक रूप से चयन करते हैं तो आप किसी प्रकार की सीमा डालते हैं तो यह बेहतर होगा। प्रकाशनों के लिए, शायद पिछले साल के भीतर पोस्ट की गई वस्तुओं से यादृच्छिक रूप से चुनें।

1

यहाँ एक उदाहरण (source) है:

SET @randomId = Cast(((@maxValue + 1) - @minValue) * Rand() + @minValue AS tinyint); 
-1

यह तुम क्या जरूरत है:

चुनें * TABLE_NAME आदेश से रेंड द्वारा() सीमा 1

+3

सवाल SQL सर्वर टैग किया गया था। रैंड() काम नहीं करता है और एलआईटी मान्यता प्राप्त नहीं है, और न ही सवाल एक परिणाम को सीमित करने के लिए पूछता है। – LarsTech

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