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

PostgreSQL, खींचें और स्वैप करें

उदाहरण 1:

update kalksad1 set brred=_brred
from (
  select
    row_number() over (
      order by brred<2 desc, brred=4 desc, brred>=2 desc, brred
    ) as _brred,
    kalk_id as _kalk_id
  from kalksad1
  where brkalk=2
  order by _kalk_id
) as _
where kalk_id=_kalk_id and brred!=_brred;

उदाहरण 2:

update kalksad1 set brred=_brred
from (
  select
    row_number() over (
      order by brred<4 desc, brred!=1 desc, brred>=4 desc, brred
    ) as _brred,
    kalk_id as _kalk_id
  from kalksad1
  where brkalk=2
  order by _kalk_id
) as _
where kalk_id=_kalk_id and brred!=_brred;

यदि आपके पास (brkalk,brred) . पर अद्वितीय अनुक्रमणिका है तो यह अधिक जटिल होगा, क्योंकि पुन:क्रमांकन के दौरान डुप्लिकेट होंगे brred

लेकिन कई पंक्तियों के लिए मैं कुछ ऐसा उपयोग करने की अनुशंसा करता हूं जो 8 बिट कंप्यूटरों पर बेसिक भाषा के दिनों में बहुत उपयोगी था - अंतराल के साथ अपनी पंक्तियों की संख्या।

तो इसके बजाय:

(26, 2, 1, 'text index 26 doc 2 row 1'),
(30, 2, 2, 'text index 30 doc 2 row 2'),
(42, 2, 3, 'text index 42 doc 2 row 3'),
(43, 2, 4, 'text index 43 doc 2 row 4'),
(12, 2, 5, 'text index 12 doc 2 row 5'),

उपयोग करें:

(26, 2, 1024, 'text index 26 doc 2 row 1'),
(30, 2, 2048, 'text index 30 doc 2 row 2'),
(42, 2, 3072, 'text index 42 doc 2 row 3'),
(43, 2, 4096, 'text index 43 doc 2 row 4'),
(12, 2, 5120, 'text index 12 doc 2 row 5'),

तब आपके उदाहरण कुछ इस तरह दिखाई देंगे:

  • उदाहरण 1:update kalksad1 set brred=(2048+1024)/2 where kalk_id=43 , जो इसे बदल देगा:
    (26, 2, 1024, 'text index 26 doc 2 row 1'),
    (43, 2, 1536, 'text index 43 doc 2 row 4'),
    (30, 2, 2048, 'text index 30 doc 2 row 2'),
    (42, 2, 3072, 'text index 42 doc 2 row 3'),
    (12, 2, 5120, 'text index 12 doc 2 row 5'),
    

  • उदाहरण 2:update kalksad1 set brred=(4096+3072)/2 where kalk_id=43 , जो इसे बदल देगा:
    (30, 2, 2048, 'text index 30 doc 2 row 2'),
    (42, 2, 3072, 'text index 42 doc 2 row 3'),
    (26, 2, 3584, 'text index 26 doc 2 row 1'),
    (43, 2, 4096, 'text index 43 doc 2 row 4'),
    (12, 2, 5120, 'text index 12 doc 2 row 5'),
    

    केवल जब उन पंक्तियों के बीच कोई अंतर न हो जहां लक्ष्य होना चाहिए, तो आपको पहले उदाहरण के लिए पंक्तियों को फिर से क्रमांकित करना होगा:

    update kalksad1 set brred=_brred*1024
    from (
      select row_number() over (order by brred) as _brred, kalk_id as _kalk_id
      from kalksad1
      where brkalk=2
      order by _brred desc
    ) as _
    where kalk_id=_kalk_id;
    

    यह स्रोत और लक्ष्य के बीच प्रत्येक पंक्ति को बदलने से कहीं अधिक तेज होगा। लेकिन यह तभी मायने रखता है जब बदलने के लिए कई पंक्तियाँ हों।



    1. Database
    2.   
    3. Mysql
    4.   
    5. Oracle
    6.   
    7. Sqlserver
    8.   
    9. PostgreSQL
    10.   
    11. Access
    12.   
    13. SQLite
    14.   
    15. MariaDB
    1. PostgreSQL 9.3 में स्विचओवर/स्विचबैक लागू करना।

    2. क्या मैं पहले से ही बनाए जाने के बाद, PostgreSQL तालिका में एक अद्वितीय बाधा जोड़ सकता हूं?

    3. डेटाबेस के भीतर केवल एक तालिका से सम्मिलित विवरण प्राप्त करने के लिए pg_dump का उपयोग करना

    4. कैसे pg_sleep () PostgreSQL में काम करता है

    5. DigitalOcean पर PostgreSQL को कैसे परिनियोजित करें