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

दूसरे रिकॉर्ड के समान कॉलम के साथ कॉलम मान को स्वैप करें

सिंगल "स्वैप" ऑपरेशन...

स्वैप(@old_pos, @new_pos)

UPDATE
  my_table
SET
  position = CASE WHEN position = @old_pos THEN @new_pos ELSE @old_pos END
WHERE
  position IN (@old_pos, @new_pos)


हालांकि यह आसानी से स्वैप-ऑपरेशंस की तालिका में विस्तारित नहीं होता है। ऐसा इसलिए है क्योंकि यह एक ही बार में सभी स्वैप करने की कोशिश करेगा, जब वास्तव में स्वैप एक विशिष्ट क्रम में होना चाहिए...


इसके अलावा, यदि आप SWAP(@id, @new_pos) करना चाहते हैं, तो आपको या तो एक उप-क्वेरी करने की जरूरत है या आप जिस टेबल को अपडेट कर रहे हैं, उस पर सेल्फ जॉइन करना होगा। MySQL को यह पसंद नहीं है, और हालांकि सीमा के आसपास के तरीके हैं, यह चीजों को थोड़ा गड़बड़ कर देता है...

UPDATE
  my_table
INNER JOIN
  (SELECT position AS old_pos, @new_pos AS new_pos FROM (SELECT position FROM my_table WHERE id = @id)) AS params
    ON my_table.position IN (params.old_pos, params.new_pos)
SET
  myTable.position = CASE WHEN position = old_pos THEN new_pos ELSE old_pos END

(मैं सोचता हूं यह काम करेगा)


नोट:

ये दोनों मानते हैं कि दोनों @old_pos और @new_pos, या @id और @new_pos पाए जाते हैं, यह जांच नहीं करता है, और करेगा अगर वे मौजूद नहीं हैं तो गड़बड़ करें।

इसे लेन-देन में डालकर हल किया जा सकता है, और अगर ROW_COUNT() दिखाता है कि केवल 1 रिकॉर्ड अपडेट किया गया है तो वापस रोल करना।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक ही विदेशी कुंजी (Django 1.8, MySQL 5.5) वाली वस्तुओं के लिए ऑटोइनक्रिकमेंट-जैसे फ़ील्ड

  2. SQL - यदि मौजूद है तो अद्यतन करें अन्यथा सम्मिलित करें

  3. mysql फ़ील्ड में संग्रहीत है, लेकिन इको के दौरान कोई लाइन ब्रेक नहीं है

  4. .Net MySql त्रुटि दी गई कुंजी शब्दकोश में मौजूद नहीं थी

  5. पोस्टग्रेएसक्यूएल। Models.py डेटाबेस योजना में परिवर्तित नहीं होता है