2012-06-19 10 views
10

En este ejemplo tenemos 3 tablas relacionadas en una base de datos SQLite:sqlite combinación externa izquierda varias tablas

CREATE TABLE test1 (
    c1 integer, 
    primary key (c1) 
); 
CREATE TABLE test2 (
    c1 integer, 
    c2 integer, 
    primary key (c1, c2) 
);  
CREATE TABLE test3 (
    c2 integer, 
    c3 integer, 
    primary key (c2) 
); 

Ahora tengo que combinar todas las tablas:

 test1 -> test2 (with c1 column) 
      test2 -> test3 (with c2 column).

He probado esta solución, pero no se ejecuta:

SELECT 
    * 
    FROM test1 a 
     LEFT OUTER JOIN test2 b 
         LEFT OUTER JOIN test3 c 
          ON c.c2 = b.c2 
      ON b.c1=a.c1 

me da un error: near "ON": syntax error.

¿Algún ayuda?

+1

sqlite3 nunca utilizado, pero la sintaxis SQL estándar correcto es LEFT OUTER JOIN ... ... EN combinación externa izquierda ... EN. .., y no uniones anidadas.) – raina77ow

+0

He utilizado esta sintaxis en Oracle, PostgreSQL y SQLServer sin ningún problema. – ferpega

+1

Uniones anidadas - o 'JOIN (un JOIN dos UNIR tres) ON (one.id = two.id AND two.some_id = three.some_id)'? – raina77ow

Respuesta

28

Esto es un simple extravío de su declaración ON. Esto se ajusta al estándar SQL:

SELECT * 
FROM test1 a 
LEFT OUTER JOIN test2 b ON b.c1=a.c1 
LEFT OUTER JOIN test3 c ON c.c2=b.c2 

Esto se explica en further depth here.

+0

Gracias Nathaniel funciona bien. He usado el formato sql anterior durante años. Pero a SQLite no le gusta demasiado. – ferpega

+0

Es posible que las implementaciones específicas (¿de lujo?) Puedan analizarlo, pero ese SQLite solo se ajusta a la especificación. –

Cuestiones relacionadas