{"id":3994,"date":"2023-12-27T15:25:00","date_gmt":"2023-12-27T14:25:00","guid":{"rendered":"https:\/\/www.skillup.cloud\/?p=3994"},"modified":"2024-01-23T17:43:23","modified_gmt":"2024-01-23T16:43:23","slug":"comando-sql-merge-tre-in-uno","status":"publish","type":"post","link":"https:\/\/www.skillup.cloud\/it\/comando-sql-merge-tre-in-uno\/","title":{"rendered":"Comando SQL Merge: tre in uno"},"content":{"rendered":"\n<p>Il comando <strong>MERGE<\/strong> in SQL su IBM iSeries \u00e8 utilizzato per sincronizzare dati tra tabelle, combinando operazioni di <strong>INSERT<\/strong>, <strong>UPDATE<\/strong> o <strong>DELETE<\/strong> in un&#8217;unica istruzione.<\/p>\n\n\n\n<p>Questo comando \u00e8 particolarmente utile quando si deve aggiornare una tabella target con informazioni provenienti da un&#8217;altra tabella o sorgente ed esiste una corrispondenza tra i dati della sorgente e quelli del target.<\/p>\n\n\n\n<p>In questi casi (esiste una corrispondenza tra i dati della sorgente e quelli del target), il comando <strong>MERGE<\/strong> \u00e8 molto potente perch\u00e9 consente di eseguire tutte e tre queste operazioni in un&#8217;unica istruzione, in base alle condizioni specificate, ovvero l&#8217;istruzione <strong>MERGE<\/strong> potr\u00e0 eseguire:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>un aggiornamento dell\u2019occorrenza target se esiste corrispondenza delle colonne identificative tra source e target ed \u00e8 soddisfatta la ulteriore condizione di Update;<br><\/li>\n\n\n\n<li>una Delete dell\u2019occorrenza target se esiste corrispondenza delle colonne identificative tra source e target ed \u00e8 soddisfatta la ulteriore condizione di Delete;<br><\/li>\n\n\n\n<li>&nbsp;se non esiste corrispondenza (dati presenti solo su source), inserir\u00e0 i nuovi dati da source a target.<\/li>\n<\/ul>\n\n\n\n<p>Di seguito un esempio di come eseguire queste operazioni:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">MERGE INTO TargetTable AS TARGET\r\n    USING SourceTable AS SOURCE\r\nON TARGET.KeyColumn = SOURCE.KeyColumn\r\n    WHEN MATCHED AND SOURCE.ConditionForUpdate\r\n         THEN UPDATE SET TARGET.Column1 = SOURCE.Column1,\r\n                         TARGET.Column2 = SOURCE.Column2\r\n    WHEN MATCHED AND SOURCE.ConditionForDelete\r\n         THEN DELETE\r\n    WHEN NOT MATCHED AND SOURCE.ConditionForInsert\r\n         THEN INSERT (Column1, Column2)\n              VALUES (SOURCE.Column1, SOURCE.Column2)\r\nELSE IGNORE;\r<\/pre>\n\n\n\n<p>In questo esempio:<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"1\">\n<li><strong>TargetTable<\/strong> \u00e8 la tabella in cui si desidera inserire, aggiornare o eliminare i dati.<br><\/li>\n\n\n\n<li><strong>SourceTable<\/strong> \u00e8 la tabella sorgente da cui provengono i dati.<br><\/li>\n\n\n\n<li><strong>KeyColumn<\/strong> \u00e8 la colonna utilizzata per confrontare le righe nelle due tabelle (se \u00e8 necessaria pi\u00f9 di una colonna si aggiungono le colonne identificative ulteriori in AND).<br><\/li>\n\n\n\n<li>La clausola <strong>WHEN MATCHED AND SOURCE.ConditionForUpdate THEN<\/strong> specifica che se esiste una corrispondenza e si verifica una certa condizione (<strong>ConditionForUpdate<\/strong>), allora si esegue un <strong>UPDATE<\/strong>.<br><\/li>\n\n\n\n<li>La clausola <strong>WHEN MATCHED AND SOURCE.ConditionForDelete THEN<\/strong> specifica che se esiste una corrispondenza e si verifica un\u2019altra (diversa) condizione (<strong>ConditionForDelete<\/strong>), allora si esegue un <strong>DELETE<\/strong>.<br><\/li>\n\n\n\n<li>La clausola <strong>WHEN NOT MATCHED AND SOURCE.ConditionForInsert THEN<\/strong> specifica che se non esiste una corrispondenza e si verifica una certa condizione (<strong>ConditionForInsert<\/strong>), allora si esegue un <strong>INSERT<\/strong>.<br><\/li>\n\n\n\n<li>La clausola ELSE IGNORE evidenzia che se non sono soddisfatte le condizioni WHEN precedenti il record source viene ignorato<\/li>\n<\/ol>\n\n\n\n<p>Quindi il comando MERGE risolve con eleganza e con un unico comando operazioni che altrimenti richiederebbero diverse istruzioni di insert, update e delete<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Il comando MERGE in SQL su IBM iSeries \u00e8 utilizzato per sincronizzare dati tra tabelle, combinando operazioni di INSERT, UPDATE o DELETE in un&#8217;unica istruzione. Questo comando \u00e8 particolarmente utile quando si deve aggiornare una tabella target con informazioni provenienti&#8230;<\/p>\n","protected":false},"author":3,"featured_media":3997,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[15,17],"tags":[46,103],"class_list":["post-3994","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gestire-as400-con-sql","category-piu-in-profondita","tag-sql","tag-merge"],"_links":{"self":[{"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/posts\/3994","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/comments?post=3994"}],"version-history":[{"count":3,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/posts\/3994\/revisions"}],"predecessor-version":[{"id":3998,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/posts\/3994\/revisions\/3998"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/media\/3997"}],"wp:attachment":[{"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/media?parent=3994"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/categories?post=3994"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/tags?post=3994"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}