Necesito actualizar esta tabla en SQL Server con datos de su tabla 'padre', ver a continuación:
Mesa: venta
id (int)
udid (int)
assid (int)
Tabla: ud
id (int)
assid (int)
sale.assid
contiene el valor correcto para actualizar ud.assid
.
¿Qué consulta hará esto? Estoy pensando en un join
pero no estoy seguro de si es posible.
sql
sql-server
tsql
sql-server-2005
sql-update
Ant Swift
fuente
fuente
Respuestas:
La sintaxis depende estrictamente de qué DBMS de SQL esté utilizando. Aquí hay algunas formas de hacerlo en ANSI / ISO (también conocido como debería funcionar en cualquier SQL DBMS), MySQL, SQL Server y Oracle. Tenga en cuenta que mi método ANSI / ISO sugerido generalmente será mucho más lento que los otros dos métodos, pero si está utilizando un DBMS SQL que no sea MySQL, SQL Server u Oracle, entonces puede ser el único camino a seguir (por ejemplo, si su SQL DBMS no es compatible
MERGE
):ANSI / ISO:
MySQL:
Servidor SQL:
PostgreSQL:
Tenga en cuenta que la tabla de destino no debe repetirse en la
FROM
cláusula de Postgres.Oráculo:
SQLite:
fuente
set assid = s.assid
debería ser MySQLset u.assid = s.assid
.=
devuelve más de una fila?update ud set assid = s.assid
Esto debería funcionar en SQL Server:
fuente
postgres
fuente
Un enfoque estándar de SQL sería
En SQL Server puede usar una unión
fuente
WHERE
cláusula si desea hacer coincidir columnas adicionales.PostgreSQL :
fuente
Consulta de actualización simplificada utilizando JOIN -ing múltiples tablas.
Nota : first_table, second_table, third_table y some_column como 123456 son nombres de tablas de demostración, nombres de columnas e identificadores. Reemplácelos con los nombres válidos.
fuente
Otro ejemplo de por qué SQL no es realmente portátil.
Para MySQL sería:
Para obtener más información, lea la actualización de varias tablas: http://dev.mysql.com/doc/refman/5.0/en/update.html
fuente
Teradata Aster ofrece otra forma interesante de cómo lograr el objetivo:
fuente
Estaba pensando que el SQL-Server en la publicación superior funcionaría para Sybase ya que ambos son T-SQL, pero desafortunadamente no.
Para Sybase encontré que la actualización debe estar en la tabla en sí, no en el alias:
fuente
La siguiente declaración con la palabra clave FROM se usa para actualizar varias filas con una unión
fuente
MySQL
Obtendrá el mejor rendimiento si olvida la cláusula where y coloca todas las condiciones en la expresión ON.
Creo que esto se debe a que la consulta primero debe unir las tablas y luego ejecuta la cláusula where sobre eso, por lo que si puede reducir lo que se requiere para unirse, esa es la forma más rápida de obtener los resultados / hacer la udpate.
Ejemplo
Guión
Tienes una tabla de usuarios. Pueden iniciar sesión con su nombre de usuario o correo electrónico o número de cuenta. Estas cuentas pueden estar activas (1) o inactivas (0). Esta tabla tiene 50000 filas.
Luego tiene una tabla de usuarios para deshabilitar de una vez porque descubre que todos han hecho algo malo. Sin embargo, esta tabla tiene una columna con nombres de usuario, correos electrónicos y números de cuenta combinados. También tiene un indicador "has_run" que debe establecerse en 1 (verdadero) cuando se ha ejecutado
Consulta
Razonamiento
Si tuviéramos que unirnos solo en las condiciones OR, esencialmente necesitaría verificar cada fila 4 veces para ver si debería unirse, y potencialmente devolver muchas más filas. Sin embargo, al darle más condiciones, puede "omitir" muchas filas si no cumplen todas las condiciones al unirse.
Prima
Es más legible. Todas las condiciones están en un solo lugar y las filas para actualizar están en un solo lugar
fuente
Y en MS ACCESS:
fuente
La forma más sencilla es utilizar la expresión de tabla común (CTE) introducida en SQL 2005
fuente
fuente
Prueba este, creo que esto funcionará para ti
fuente
Para SQLite, use la propiedad RowID para realizar la actualización:
fuente