2009-04-21 11 views
34

Según the join-op syntax, SQLite tiene 13 estados unirse a distintas:¿Qué se une con SQLite?

, 
JOIN 
LEFT JOIN 
OUTER JOIN 
LEFT OUTER JOIN 
INNER JOIN 
CROSS JOIN 
NATURAL JOIN 
NATURAL LEFT JOIN 
NATURAL OUTER JOIN 
NATURAL LEFT OUTER JOIN 
NATURAL INNER JOIN 
NATURAL CROSS JOIN 

¿Son todas únicas? ¿Cuáles son equivalentes?

Respuesta

49

La gramática SQLite es un poco diferente de the SQL-92 spec 's, según la cual, los siguientes son ilegal:

*OUTER JOIN 
*NATURAL OUTER JOIN 
*NATURAL CROSS JOIN 

Los dos primeros, porque un <join type>, con el fin de contener OUTER, también deben incluir una <outer join type> antes que él. El último, porque NATURAL solo puede ocurrir en <qualified join>, no en <cross join>. Estos no parecen comportarse de acuerdo con ninguna especificación, por lo que es una buena idea evitarlos.

Como fue respondida en the mailing list, SQLite3 sólo es compatible con tres uniones: CROSS JOIN, INNER JOIN y LEFT OUTER JOIN. Los siguientes son equivalentes:

, == CROSS JOIN 
JOIN == INNER JOIN 
LEFT JOIN == LEFT OUTER JOIN 

Como se explica en the wikipedia article la palabra clave NATURAL es un atajo para encontrar y combinar en las columnas del mismo nombre, y no afecta el tipo de la unión.

De acuerdo con la SQLite page, 'RIGHT' y '' FULL   OUTER JOIN 's no son compatibles.

+0

No ¿Soporte DERECHO EXTERIOR o FULL OUTER? –

+5

No, y permítanme agregar eso explícitamente, gracias. –