AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 260133
Accepted
gabtzi
gabtzi
Asked: 2020-02-21 03:00:48 +0800 CST2020-02-21 03:00:48 +0800 CST 2020-02-21 03:00:48 +0800 CST

como posso atualizar algumas linhas da tabela usando dados de linhas existentes?

  • 772

Eu criei uma tabela onde ele armazena alguns dados da loja multilíngue com essa estrutura

create table store_locator_store_lang
(
    id_store int(11) unsigned not null,
    lang_id int not null,
    partner varchar(100) null,
    address varchar(255) null,
    city varchar(100) null,
    occupation varchar(100) null,
    primary key (id_store, id_lang)
);

id_lang can be 1 or 2

Lá eu tenho alguns dados incompletos, o que significa que existem todas as linhas, lang_id = 1mas lang_id = 2muitas linhas contêm valores vazios.

Gostaria de preencher as linhas vazias lang_id = 2com dados das linhas com lang_id = 1.

A entidade store é identificada por id_storeentão o id_storeé comum para os dois idiomas da mesma loja.

Sempre há um par armazenado, mesmo que uma linha tenha colunas vazias. Não há chance de faltar uma linha paralang_id=2

É possível realizar esta tarefa com uma consulta de atualização no banco de dados ou tenho que exportar os dados, editar e reinserir?

O servidor de banco de dados é 10.1.44-MariaDB-0ubuntu0.18.04.1 Ubuntu 18.04

Aqui está um despejo de alguns dados de exemplo

INSERT INTO store_locator_store_lang (id_store, lang_id, partner, address, city, occupation) VALUES (543, 1, 'TEST', 'TEST, Τ.Κ. 52100', 'TEST', 'TEST');
INSERT INTO store_locator_store_lang (id_store, lang_id, partner, address, city, occupation) VALUES (543, 2, '', '', '', '');
update mariadb-10.1
  • 1 1 respostas
  • 29 Views

1 respostas

  • Voted
  1. Best Answer
    Akina
    2020-02-21T03:12:14+08:002020-02-21T03:12:14+08:00

    Em geral (se "muitas linhas contêm valores vazios" significa "eles contêm NULL"):

    UPDATE store_locator_store_lang t1
      JOIN store_locator_store_lang t2 ON t1.id_store = t2.id_store 
                                      AND t1.lang_id = 1
                                      AND t2.lang_id = 2
    SET t2.partner = COALESCE(t2.partner, t1.partner),
        t2.address = COALESCE(t2.address, t1.address),
        t2.city = COALESCE(t2.city, t1.city),
        t2.occupation = COALESCE(t2.occupation, t1.occupation);
    

    O valor vazio parece ser uma string de comprimento zero e não nula.

    UPDATE store_locator_store_lang t1
      JOIN store_locator_store_lang t2 ON t1.id_store = t2.id_store 
                                      AND t1.lang_id = 1
                                      AND t2.lang_id = 2
    SET t2.partner = CASE WHEN t2.partner = ''
                          THEN t1.partner
                          ELSE t2.partner END,
        t2.address = CASE WHEN t2.address = ''
                          THEN t1.address 
                          ELSE t2.address END,
        t2.city = CASE WHEN t2.city = ''
                       THEN t1.city 
                       ELSE t2.city END,
        t2.occupation = CASE WHEN t2.occupation = ''
                             THEN t1.occupation 
                             ELSE t2.occupation END
    /* WHERE '' IN (t2.partner, t2.address, t2.city, t2.occupation) */
        ;
    
    • 1

relate perguntas

  • Maneira de atualizar muitos (> 3.000) registros com dados exclusivos, usando um formulário da Web limitado a caracteres

  • Veja os resultados reais do comando SQL UPDATE

  • Como devo atualizar os valores do campo de ID para todos os registros com base nos valores anteriores?

  • Atualizar muitas linhas em uma tabela com uma única instrução?

  • A classificação de uma instrução ORDER BY pode ser salva explicitamente com apenas uma instrução UPDATE?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve