ACTUALIZACIÓN de tabla cruzada en SQLITE3

En SQL Server, puedo hacer algo como esto:

UPDATE tbl1 SET col2 = tbl2.col2 FROM table1 tbl1 INNER JOIN table2 tbl2 ON tbl1.col1 = tbl2.col1 

No me he molestado en ver si esto forma parte de algún estándar SQL o no, y estoy seguro de que hay otras maneras de hacerlo, pero es asombrosamente útil.

Aquí está mi problema. Necesito hacer algo similar en SQL (es decir, no un lenguaje de host) con SQLITE3. Se puede hacer?

Esto funciona para sqlite:

 UPDATE tbl1 SET col2 = (SELECT col2 FROM tbl2 WHERE tbl2.col1 = tbl1.col1) 

Descubrí que esto se puede hacer con INSERT OR REPLACE INTO . Un poco más detallado que el equivalente de T-SQL, pero igual de útil.

Solo para enfatizar la publicación de Geogory Higley:

He tenido problemas con UPDATE tbl1 SET col2 = (SELECT col2 FROM tbl2 WHERE tbl2.col1 = tbl1.col1) donde actualiza columnas en tbl1 que no existen en tbl2.

ver la publicación de cheetah en http://sqlite.phxsoftware.com/forums/p/1708/7238.aspx que apunta a:

http://www.mail-archive.com/sqlite-users@sqlite.org/msg27207.html

El código es:

 insert or replace into foo (id, name, extra) select bar.id, bar.name, foo.extra from bar left join foo on bar.id = foo.id; 

y esto parece funcionar correctamente Parece haber muchas publicaciones en diferentes sitios que recomiendan el primer enfoque, por lo que es un poco confuso. Le sugiero que pruebe su salida con mucho cuidado si usa este método que parece más rápido y puede funcionar con tablas combinadas.

Por lo que vale, Microsoft SQL Server y MySQL son las únicas marcas de bases de datos que admiten actualizaciones de múltiples tablas, y la syntax que cada una usa no es similar.

Esta característica no es parte de SQL estándar. Por lo tanto, no es sorprendente que el soporte para la actualización (y eliminación) de varias tablas no sea estándar y no sea compatible con muchas marcas.

De todos modos, me alegra que hayas encontrado una solución que funcione para tu tarea.