Necesito verificar (de la misma tabla) si hay una asociación entre dos eventos en función de la fecha y la hora.
Un conjunto de datos contendrá la fecha y hora de finalización de ciertos eventos y el otro conjunto de datos contendrá la fecha y hora de inicio para otros eventos.
Si el primer evento se completa antes del segundo evento, me gustaría vincularlos.
Lo que tengo hasta ahora es:
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
Entonces me uno a ellos:
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
¿Puedo entonces, en función de mi campo validation_check, ejecutar una consulta UPDATE con SELECT anidado?
mysql
select
sql-update
John M
fuente
fuente
Respuestas:
En realidad, puede hacer esto de dos maneras:
Actualización de MySQL sintaxis de unión:
Sintaxis ANSI SQL:
Elija el que le parezca más natural.
fuente
You can't specify target table ___ for update in FROM clause SQL.sql
tableA
=tableB
. Estás obligado a crear una tabla temporal para almacenar el resultado intermedio. (tuvo que escribir una consulta similar para un script de migración)Espero que esto funcione para usted.
fuente
Fácil en MySQL:
fuente
Si alguien busca actualizar datos de una base de datos a otra sin importar a qué tabla se dirija, debe haber algunos criterios para hacerlo.
Este es mejor y limpio para todos los niveles:
Traaa! ¡Funciona muy bien!
Con la comprensión anterior, puede modificar los campos establecidos y los criterios "on" para hacer su trabajo. También puede realizar las comprobaciones, luego extraer los datos en las tablas temporales y luego ejecutar la actualización utilizando la sintaxis anterior reemplazando los nombres de las tablas y columnas.
Espero que funcione, si no, házmelo saber. Escribiré una consulta exacta para usted.
fuente
Espero que esto te ayude en un caso en el que tengas que combinar y actualizar entre dos tablas.
fuente
Encontré esta pregunta al buscar mi propia solución para una combinación muy compleja. Esta es una solución alternativa, a una versión más compleja del problema, que pensé que podría ser útil.
Necesitaba rellenar el campo product_id en la tabla de actividades, donde las actividades están numeradas en una unidad y las unidades están numeradas en un nivel (identificado mediante una cadena ?? N), de modo que uno pueda identificar actividades utilizando una SKU, es decir, L1U1A1. Esos SKU se almacenan en una tabla diferente.
Identifiqué lo siguiente para obtener una lista de activity_id vs product_id: -
Descubrí que eso era demasiado complejo para incorporarlo a un SELECT dentro de mysql, así que creé una tabla temporal y la uní con la declaración de actualización:
Espero que alguien encuentre esto útil
fuente
fuente
Puede actualizar valores de otra tabla usando la unión interna como esta
Siga aquí para saber cómo utilizar esta consulta http://www.voidtricks.com/mysql-inner-join-update/
o puede usar select como subconsulta para hacer esto
consulta explicada en detalles aquí http://www.voidtricks.com/mysql-update-from-select/
fuente
Puedes usar:
fuente
Para la misma mesa,
fuente
Tuve un problema con las entradas duplicadas en una misma tabla. A continuación se muestran los enfoques que estaban funcionando para mí. También ha sido defendido por @sibaz.
Finalmente lo resolví usando las siguientes consultas:
La consulta de selección se guarda en una tabla temporal
La tabla temporal se une en la consulta de actualización.
No tengo mucha experiencia con SQL, por favor aconseje cualquier enfoque mejor que conozca.
Las consultas anteriores son para el servidor MySql.
fuente