Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL 5.7/8.0 बनाम MySQL 5.6 में प्रत्येक बार-बार चयन के लिए सबक्वायरी के रैंड () कॉलम का पुनर्मूल्यांकन किया गया

जैसा कि MySQL 8.0.0 माइलस्टोन रिलीज में बताया गया है उपलब्ध है ,

मुझे लगता है कि यह उस व्यवहार का कारण है जो मैं MySQL के नए संस्करणों में देख रहा हूं। उल्लिखित संकेत का उपयोग MySQL 8.0 के साथ RAND() को केवल एक बार कॉल करने के लिए मजबूर करने के लिए किया जा सकता है:

SELECT  /* NO_MERGE(q) */
        q.i,
        q.r,
        q.r
FROM    (
        SELECT 
                id AS i,
                (FLOOR(RAND(100) * 4)) AS r
        FROM t
        ) AS q;

+---+-----+-----+
| i |  r  |  r  |
+---+-----+-----+
| 1 |   0 |   0 |
| 2 |   2 |   2 |
| 3 |   3 |   3 |
| 4 |   2 |   2 |
| 5 |   1 |   1 |
+---+-----+-----+

हालांकि यह 5.7 में उपलब्ध नहीं है। 5.7 के साथ वांछित व्यवहार प्राप्त करने के लिए, LIMIT <a very high number> add जोड़ें व्युत्पन्न तालिका परिभाषा के लिए (मैं नीचे हस्ताक्षरित LONG_MAX का उपयोग कर रहा हूं)। इसके लिए रॉय लिसेंग को धन्यवाद समाधान

SELECT
        q.i,
        q.r,
        q.r
FROM    (
        SELECT 
                id AS i,
                (FLOOR(RAND(100) * 4)) AS r
        FROM t LIMIT 9223372036854775807
        ) AS q;

+---+-----+-----+
| i |  r  |  r  |
+---+-----+-----+
| 1 |   0 |   0 |
| 2 |   2 |   2 |
| 3 |   3 |   3 |
| 4 |   2 |   2 |
| 5 |   1 |   1 |
+---+-----+-----+

फिलिप्सी . के रूप में टिप्पणी में उल्लेख किया गया है, किसी भी अनुकूलन को लागू किए बिना एक क्वेरी अभिव्यक्ति के परिणाम को सख्ती से परिभाषित किया जाना चाहिए। जिसका अर्थ है कि यह MySQL 5.7/8.0 में एक अनुकूलक बग है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. वेब पर पासवर्ड भेजना

  2. PHP ऐप की सेटिंग्स को स्टोर करने का सबसे अच्छा तरीका?

  3. PHP MySQL खोज में कोई परिणाम नहीं मिलने पर संदेश प्रदर्शित करना

  4. SQL UNION/EXCEPT/INTERSECT कथनों में कोष्ठकों के बारे में SQL मानक क्या कहता है?

  5. विजुअल स्टूडियो/विजुअल स्टूडियो 2017 डेटासोर्स विज़ार्ड के लिए MySQL के साथ समस्या। वस्तु का संदर्भ वस्तु की आवृत्ति अनुसार सेट नहीं. है