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

सीमा के साथ MySQL बैच क्वेरी

निम्नलिखित विधि इस तथ्य पर निर्भर करती है कि possessions तालिका में एक प्राथमिक कुंजी होती है और citizen_id उसका हिस्सा नहीं है। ये रहा आइडिया:

  1. अपडेट के सभी पैरामीटर डालें (citizen_id और good_id फ़िल्टर करने के लिए, citizen_id . के नए मान और अद्यतन करने के लिए पंक्तियों की संख्या) कुछ भंडारण, एक समर्पित तालिका, शायद, या एक अस्थायी तालिका में।

  2. possessions को पंक्ति क्रमांक असाइन करें (citizen_id, good_id) . पर पंक्तियों का विभाजन , फिर citizen_id पर मूल पूर्ण सेट को फ़िल्टर करने के लिए पैरामीटर तालिका में सेट की गई रैंक वाली पंक्ति में शामिल हों और good_id , साथ ही पंक्तियों की संख्या।

  3. possessions में शामिल हों और प्राथमिक कुंजी मानों पर पिछले जुड़ाव का परिणाम और citizen_id . को अपडेट करें नए मूल्यों के साथ।

MySQL के SQL में, उपरोक्त कुछ इस तरह दिख सकता है:

UPDATE possessions AS p
INNER JOIN
(
  SELECT
    @r := @r * (@c = p.citizen_id AND @g = p.good_id) + 1 AS r,
    p.possession_id,
    @c := p.citizen_id AS citizen_id,
    @g := p.good_id AS good_id
  FROM
    possessions AS p
  CROSS JOIN
    (SELECT @r := 0, @c := 0, @g := 0) AS x
  ORDER BY
    p.citizen_id,
    p.good_id
) AS f ON p.possession_id = f.possession_id
INNER JOIN
  possession_updates AS u ON u.citizen_id = f.citizen_id AND u.good_id = f.good_id
SET
  p.citizen_id = u.new_citizen_id
WHERE
  f.r <= u.row_count
;

possessions_update पैरामीटर मान वाली तालिका है।

क्वेरी पंक्ति क्रमांकन की एक ज्ञात विधि का उपयोग करती है जो चर को नियोजित करती है, जिसे f . में कार्यान्वित किया जाता है सबक्वेरी।

मेरे पास MySQL नहीं है इसलिए मैं प्रदर्शन के दृष्टिकोण से इसका ठीक से परीक्षण नहीं कर सकता, लेकिन कम से कम आप यह SQL Fiddle डेमो कि यह तरीका काम करता है। (अपडेट स्टेटमेंट स्कीमा स्क्रिप्ट में है, क्योंकि SQL फिडल MySQL के लिए राइट-साइड स्क्रिप्ट में डेटा मॉडिफिकेशन स्टेटमेंट की अनुमति नहीं देता है। राइट साइड सिर्फ possessions के पोस्ट-अपडेट कंटेंट को लौटाता है। ।)




  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. PHP - MySQL ने एक सरणी सम्मिलित करने के लिए कथन तैयार किया

  3. MySQL, json, JSON_ARRAY_APPEND - 5.7.13 पर एपेंड काम क्यों नहीं करेगा?

  4. MySQL में कीवर्ड खोज कैसे कार्यान्वित करें?

  5. चेतावनी SqlExceptionHelper:143 - SQL त्रुटि:0, SQLState:08S01- SqlExceptionHelper:144 - संचार लिंक विफलता