Estou tentando entender como atualizar várias linhas com valores diferentes e simplesmente não entendi. A solução está em toda parte, mas para mim parece difícil de entender.
Por exemplo, três atualizações em uma consulta:
UPDATE table_users
SET cod_user = '622057'
, date = '12082014'
WHERE user_rol = 'student'
AND cod_office = '17389551';
UPDATE table_users
SET cod_user = '2913659'
, date = '12082014'
WHERE user_rol = 'assistant'
AND cod_office = '17389551';
UPDATE table_users
SET cod_user = '6160230'
, date = '12082014'
WHERE user_rol = 'admin'
AND cod_office = '17389551';
Eu li um exemplo, mas realmente não entendo como fazer a consulta. ou seja:
UPDATE table_to_update
SET cod_user= IF(cod_office = '17389551','622057','2913659','6160230')
,date = IF(cod_office = '17389551','12082014')
WHERE ?? IN (??) ;
Não estou totalmente claro como fazer a consulta se houver várias condições na condição WHERE e IF se ... alguma idéia?
mysql
sql
sql-update
franvergara66
fonte
fonte
Respostas:
Você pode fazer assim:
Não entendo o seu formato de data. As datas devem ser armazenadas no banco de dados usando tipos de data e hora nativos.
fonte
update
s afetam apenas registros que já existem.cod_user
for uma chave primária e os valores estiverem sendo embaralhados, várias atualizações provavelmente serão a melhor rota.O MySQL permite uma maneira mais legível de combinar várias atualizações em uma única consulta. Isso parece se encaixar melhor no cenário que você descreve, é muito mais fácil de ler e evita essas múltiplas condições difíceis de desembaraçar.
Isso pressupõe que a
user_rol, cod_office
combinação seja uma chave primária. Se apenas uma delas for a chave primária , adicione o outro campo à lista UPDATE. Se nenhum deles for uma chave primária (que parece improvável), essa abordagem sempre criará novos registros - provavelmente não o que se deseja.No entanto, essa abordagem facilita a criação de declarações preparadas e é mais concisa.
fonte
cod_user=VALUES(cod_user), ...
, mesmo a partir oficiais MySQL 5.6 docsVocê pode usar uma
CASE
instrução para manipular vários cenários if / then:fonte
fonte
Para estender a resposta @Trevedhek ,
Caso a atualização precise ser feita com chaves não exclusivas, serão necessárias 4 consultas
NOTA: Isso não é seguro para transações
Isso pode ser feito usando uma tabela temporária.
Etapa 1: Crie as chaves da tabela temporária e as colunas que você deseja atualizar
Etapa 2: Inserir os valores na tabela temporária
Etapa 3: atualizar a tabela original
Etapa 4: Soltar a tabela temporária
fonte
Aqui col4 e col1 estão na Tabela1. col2 e col3 estão na Tabela2
Estou tentando atualizar cada col1 onde col4 = col3 valor diferente para cada linha
fonte
Eu fiz assim:
onde PushSettings é
Funciona bem
fonte