Preciso verificar (da mesma tabela) se há uma associação entre dois eventos com base na data e hora.
Um conjunto de dados conterá a data e hora final de determinados eventos e o outro conjunto de dados conterá a data e hora de início de outros eventos.
Se o primeiro evento for concluído antes do segundo, eu gostaria de vinculá-los.
O que tenho até agora é:
SELECT name as name_A, date-time as end_DTS, id as id_A
FROM tableA WHERE criteria = 1
SELECT name as name_B, date-time as start_DTS, id as id_B
FROM tableA WHERE criteria = 2
Então eu me junto a eles:
SELECT name_A, name_B, id_A, id_B,
if(start_DTS > end_DTS,'VALID','') as validation_check
FROM tableA
LEFT JOIN tableB ON name_A = name_B
Posso, então, com base no meu campo validation_check, executar uma consulta UPDATE com o SELECT aninhado?
mysql
select
sql-update
John M
fonte
fonte
Respostas:
Você pode fazer isso de duas maneiras:
Sintaxe de junção de atualização do MySQL:
Sintaxe ANSI SQL:
Escolha o que lhe parecer mais natural.
fonte
You can't specify target table ___ for update in FROM clause SQL.sql
tableA
=tableB
. Você é forçado a criar uma tabela temporária para armazenar o resultado intermediário. (tinha que escrever uma consulta similar para um script de migração)Espero que funcione para voce.
fonte
Fácil no MySQL:
fonte
Se alguém estiver tentando atualizar dados de um banco de dados para outro, não importa qual tabela esteja direcionada, deve haver alguns critérios para fazê-lo.
Este é melhor e limpo para todos os níveis:
Traaa! Funciona muito bem!
Com o entendimento acima, você pode modificar os campos definidos e os critérios "on" para fazer seu trabalho. Você também pode executar as verificações, puxar os dados para as tabelas temporárias e executar a atualização usando a sintaxe acima, substituindo os nomes de tabelas e colunas.
Espero que funcione, se não me avise. Escreverei uma consulta exata para você.
fonte
Espero que isso ajude você em um caso em que você deve corresponder e atualizar entre duas tabelas.
fonte
Encontrei essa pergunta ao procurar minha própria solução para uma junção muito complexa. Esta é uma solução alternativa, para uma versão mais complexa do problema, que eu pensei que poderia ser útil.
Eu precisava preencher o campo product_id na tabela de atividades, onde as atividades são numeradas em uma unidade e as unidades são numeradas em um nível (identificado usando uma string ?? N), para que se possa identificar atividades usando um SKU, ou seja, L1U1A1. Esses SKUs são armazenados em uma tabela diferente.
Identifiquei o seguinte para obter uma lista de activity_id vs product_id: -
Eu achei que isso era muito complexo para incorporar em um SELECT dentro do mysql, então criei uma tabela temporária e juntei-a à instrução update:
Espero que alguém ache isso útil
fonte
fonte
Você pode atualizar valores de outra tabela usando a junção interna como esta
Siga aqui para saber como usar esta consulta http://www.voidtricks.com/mysql-inner-join-update/
ou você pode usar select como subconsulta para fazer isso
consulta explicada em detalhes aqui http://www.voidtricks.com/mysql-update-from-select/
fonte
Você pode usar:
fonte
Para a mesma tabela,
fonte
Eu tive um problema com entradas duplicadas em uma tabela em si. Abaixo estão as abordagens que estavam funcionando para mim. Também foi defendido por @sibaz.
Finalmente eu resolvi usando as consultas abaixo:
A consulta de seleção é salva em uma tabela temporária
A tabela temporária está associada à consulta de atualização.
Eu não tenho muita experiência com SQL, por favor, informe qualquer abordagem melhor que você conhece.
As perguntas acima são para o servidor MySql.
fonte