Para entender por qué no conseguir ningún resultado cuando TableC
no tiene ningún registro, tiene que aprender un poco sobre tipos de combinación en SQL.
Básicamente, cuando se emite la consulta
TableA A JOIN TableB B ON A.id = B.a_id
usted está diciendo a la base de datos a la vista tanto TableA
y TableB
a buscar todos los pares de filas que satisfacen la predicado de combinación (A.id = B.a_id) Por lo tanto, si TableB
está vacío, la base de datos no puede encontrar y par de filas con los criterios mencionados anteriormente.
Este tipo de JOIN se llama INNER JOIN y es el tipo más común de operación de unión utilizada.
En su caso que se desea obtener todas las filas de TableA X TableB
y todos filas relevantes de TableC
, si existen tales filas (basado en el predictate unirse a "A.id = C.a_id". Este es el caso para un OUTER JOIN. los dos tipos más comunes de este tipo de unión son el LEFT JOIN (que incluye todas las filas de la tabla izquierda) y el derecho join (que incluye todas las filas de la tabla derecha).
En este caso, su consulta debería ser:
SELECT A.*
FROM
(TableA A JOIN Table B B ON A.id = B.a_id)
LEFT JOIN TableC C ON A.id = C.a_ID
sugeriría a echar un vistazo a la página relevant Wikipedia, si usted quiere saber más acerca de los tipos de combinaciones en SQL
Editar
Siguiendo la misma lógica, si usted quiere tener todo filas de TableA
y sólo las filas de las tablas pertinentes TableB
y TableC
(si existen), la consulta se convierten en:
SELECT A.*
FROM
(TableA A LEFT JOIN Table B B ON A.id = B.a_id)
LEFT JOIN TableC C ON A.id = C.a_ID
+1 - se ve bien para mí, además de que hay una falta de "ON" entre "Tab leC C "y" (A.id " –