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

MySQL संग्रहीत कार्यविधि डिज़ाइन समस्या। पुनरावृत्ति या पदानुक्रम?

शुरू करने के लिए एक अच्छी जगह होगी:

SELECT 
    A.num_1, B.num_2 
FROM 
    Smaller AS A JOIN Smaller AS B ON (A.num_1 < B.num_2) 
ORDER BY A.num_1, B.num_2;

अपनी संग्रहीत प्रक्रिया के अंदर, इसे एक कर्सर में रखें, कर्सर पर पुनरावृति करें और प्रत्येक पंक्ति के लिए INSERT IGNORE करें। यानी:

DECLARE num1,num2 INT;
DECLARE done DEFAULT 0;
DECLARE mycursor CURSOR FOR SELECT # use the select above, im lazy here
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

OPEN mycursor;

my_loop: LOOP
    FETCH mycursor INTO num1, num2;
    IF done THEN
       LEAVE my_loop;
    END IF;
    INSERT IGNORE INTO Smaller VALUES (num1,num2);
END LOOP;

आपके अद्यतन प्रश्न का उत्तर देने के लिए, यदि आप अद्वितीय पंक्तियों के बीच संबंधों के माध्यम से जुड़े हुए हैं तो पूरी तरह से सुनिश्चित नहीं हैं (आपको इस संबंध को संग्रहीत करने के लिए दो कॉलम की आवश्यकता होगी, इसलिए यह काफी समान होगा)। या यदि आपका मतलब है कि आपके पास एक तालिका है जिसमें सभी संख्याएं हैं, और दूसरी दो स्तंभ तालिका है जिसमें पहली तालिका की पंक्तियों के बीच संबंध हैं।

या, अंत में, यदि आप एक तालिका चाहते हैं जिसमें केवल "1-2", "1-3" आदि के साथ तार हों। यदि ऐसा है, तो मैं इसे दो अलग-अलग कॉलम के रूप में रखूंगा और जब आप मतदान करेंगे तो CONCAT का उपयोग करके उन्हें स्ट्रिंग के रूप में आउटपुट करेंगे। टेबल :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. संघ के साथ mysql आदेश काम नहीं कर रहा है

  2. डेटाबेस से चार यादृच्छिक डेटा प्रदर्शित करने के लिए क्वेरी

  3. UUID पीढ़ी के लिए mysql में ट्रिगर बनाना

  4. django mysql इंडेक्स का बल प्रयोग

  5. MySQL COUNT DISTINCT