2008-11-30 91 views
8

En SQL Server, que puede hacer algo como esto:Tabla cruzada en Sqlite3

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

que no se han molestado en mirar si esto es parte de ningún estándar SQL o no, y estoy seguro hay otras maneras de hacerlo, pero es asombrosamente útil.

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

Respuesta

19

Esto funciona para SQLite:

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

me salvó el día !!! – Odys

+2

no es muy útil si tiene varias columnas que desea establecer desde la misma fila en la segunda tabla. – Michael

+2

@Michael responde perfectamente su pregunta, si tiene un problema diferente que desea resolver, haga una nueva pregunta. –

1

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

+4

¿Puede proporcionar su solución? –

+0

@HannesdeJager Mira la nueva respuesta, encontré una solución. –

0

Por lo que vale la pena, Microsoft SQL Server y MySQL son las únicas marcas de base de datos que soportan actualizaciones de múltiples mesas, y la sintaxis de cada uno de los usos no es similar.

Esta característica no es parte del 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 su tarea.

+0

¿no combinarían SQL Server y MySQL una gran parte de todas las bases de datos en producción? Supongo que al menos dos tercios, tal vez algún Oráculo sea el otro. Este comentario hace que parezca que la solicitud es "fuera de lo común", pero de hecho es respaldada por la mayoría de las bases de datos. – Tommy

+0

@Tommy, dado que la sintaxis de actualización multi-tabla de Microsoft no es compatible con la sintaxis de actualización multi-tabla de MySQL, no creo que sea justo agruparlos. –

1

Sólo para enfatizar el post de Geogory Higley: problemas

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

ver post guepardo en http://sqlite.phxsoftware.com/forums/p/1708/7238.aspx que apunta a:

http://www.mail-archive.com/[email protected]/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.

+0

"He tenido problemas con UPDATE tbl1 SET col2 = (SELECCIONE col2 FROM tbl2 WHERE tbl2.col1 = tbl1.col1) donde actualiza columnas en tbl1 que no existen en tbl2. "¿Cómo se puede actualizar una columna en la tabla 1 a una columna en tbl2 que no existe en tbl2? ¿No es esta solicitud un poco inválida? – Tommy