Considere uma tabela de alguns membros da família:
mysql> SELECT * FROM some_table;
+--------+--------+--------+
| f_name | l_name | work |
+--------+--------+--------+
| Meirav | Cohen | school |
| Dotan | Cohen | |
+--------+--------+--------+
2 rows in set (0.00 sec)
Suponha que essa f_name
seja a chave primária e que todas as colunas sejam VARCHAR
. Dados desconhecidos não são representados como NULL, mas sim como uma string vazia (como pode ser visto na work
coluna).
Gostaria de adicionar alguns dados que conheço sobre uma pessoa, mas prefiro não consultar o banco de dados para ver o que há, mas fazer com que o banco de dados mescle o valor existente com os novos valores:
mysql> INSERT INTO some_table (f_name, l_name, work)
VALUES ('Dotan', '', 'php')
ON DUPLICATE KEY UPDATE
f_name = IFNULL(f_name, 'Dotan'),
l_name = IFNULL(l_name, ''),
work = IFNULL(work, 'php');
Obviamente, IFNULL
não se encaixa no trabalho, pois verifica apenas NULL, não strings vazias. Além disso, existe a desvantagem de que cada valor a ser adicionado deve aparecer duas vezes no SQL.
Existe alguma maneira de fazer com que o banco de dados mescle os dados em strings vazias? Além disso, pode ser feito de forma que as strings a serem inseridas apareçam apenas uma vez no SQL?
Para evitar colocar valores duas vezes em sua
INSERT
instrução, use aVALUES(<column_name>)
função.Infelizmente, não está muito claro em sua pergunta qual é o resultado desejado. Mas, supondo que você queira atualizar apenas as colunas que possuem
NULL
ou strings vazias, você pode fazerAqui está a demonstração do SQLFiddle
Se não for exatamente o que você deseja, considere postar o resultado desejado e explicar quais valores sob quais condições você deseja atualizar