{"id":241,"date":"2021-04-05T04:16:42","date_gmt":"2021-04-05T04:16:42","guid":{"rendered":"http:\/\/jplatz.com.br\/syntax\/?p=241"},"modified":"2021-04-05T04:23:40","modified_gmt":"2021-04-05T04:23:40","slug":"mysql-update-join-para-alterar-multiplas-linhas-de-uma-so-vez","status":"publish","type":"post","link":"https:\/\/jplatz.com.br\/syntax\/2021\/04\/05\/mysql-update-join-para-alterar-multiplas-linhas-de-uma-so-vez\/","title":{"rendered":"MySQL Update Join para Alterar M\u00faltiplas Linhas de uma s\u00f3 vez"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code>\/\/ explicit inner join\nUPDATE product AS p\nINNER JOIN product_price AS pp ON (pp.product_id = p.product_id)\nSET pp.old_price = p.current_price,\n    p.current_price = pp.base_price * 0.8\nWHERE p.created_at &lt; '2021-01-01';\n\n\/\/ implicit inner join\nUPDATE product AS p, product_price AS pp\nSET pp.old_price = p.current_price,\n    p.current_price = pp.base_price * 0.8\nWHERE pp.product_id = p.product_id\np.created_at &lt; '2021-01-01';\n\n\/\/ explicit left join, only left side is updatable\nUPDATE product AS p\nLEFT JOIN product_price AS pp ON (pp.product_id = p.product_id)\nSET p.deleted = 1\nWHERE p.created_at &lt; '2021-01-01';<\/code><\/pre>\n\n\n\n<p>Toda vez que eu estudo um banco de dados novo uma das coisas que sempre busco em todos eles \u00e9 entender como escrever a sintaxe de um update em massa apenas relacionando tabelas sem a necessidade de la\u00e7os for ou foreach bastante comuns em Stored Procedures. Esta prefer\u00eancia \u00e9 porque a performance de uma instru\u00e7\u00e3o SQL \u00e9 amplamente superior a execu\u00e7\u00e3o de um la\u00e7o de programa\u00e7\u00e3o.<\/p>\n\n\n\n<p>Eu peguei esta mania por que quando iniciei na linguagem SQL com banco de dados Informix, este banco de dados possu\u00eda uma sintaxe fora de serie para fazer update com dados entre tabelas. A sintaxe era bastante comum e intuitiva que permitia a altera\u00e7\u00e3o de diversas colunas e diversas linhas num mesmo comando.<\/p>\n\n\n\n<p>Como o pessoal da MySQL AB tamb\u00e9m era fora de s\u00e9rie eles implementaram uma funcionalidade chamada de Cross Table Update, que nada mais \u00e9 que um update que permite join com outras tabelas. Resumindo, esta funcionalidade do MySQL preenche com perfei\u00e7\u00e3o o comportamento que eu conseguia executar com o Informix.<\/p>\n\n\n\n<p>Outra forma de se fazer update em massa \u00e9 utilizando-se sub-selects, por\u00e9m as instru\u00e7\u00f5es do update com join s\u00e3o infinitamente mais simples de serem escritas e tamb\u00e9m a performance com o update join \u00e9 bem melhor.<\/p>\n\n\n\n<p>E para que n\u00e3o finquem d\u00favidas sobre a autoria deste recurso, esta funcionalidade foi disponibilizada desde a vers\u00e3o 4.0 do MySQL.<\/p>\n\n\n\n<p>Uma salva de palma pra eles&#8230; genial!<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Toda vez que eu estudo um banco de dados novo uma das coisas que sempre busco em todos eles \u00e9 entender como escrever a sintaxe de um update em massa apenas relacionando tabelas sem a necessidade de la\u00e7os for ou foreach bastante comuns em Stored Procedures. Esta prefer\u00eancia \u00e9 porque a performance de uma instru\u00e7\u00e3o [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,23,50],"tags":[125,123,122,124],"class_list":["post-241","post","type-post","status-publish","format-standard","hentry","category-database","category-mysql","category-sql","tag-cross-table-update","tag-join","tag-update","tag-update-join"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/241","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/comments?post=241"}],"version-history":[{"count":2,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/241\/revisions"}],"predecessor-version":[{"id":244,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/241\/revisions\/244"}],"wp:attachment":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/media?parent=241"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/categories?post=241"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/tags?post=241"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}