Tengo 3 tablas en sqlite, la primera es sobre una barra de llamada entidad I:
bar *id -name
y el otro mantiene una relación entre dos compases, llamo foo a esta relación:
foo *id -bar_one (fk->bar) -bar_two (fk->bar) -baz (fk->baz)
baz tiene un atributo que califica la relación KIND que foo representa:
baz *id -description
Necesito mostrar una consulta de foo que sustituye las keys externas con los valores de bar un baz, algo así como:
id bar_one bar_two baz 1 bar1 bar2 siblings 2 bar2 bar3 acquaintances 3 bar3 bar4 enemies
No soy especialist en DBs como puedes ver, lo intenté con un join y funciona con foo y baz.
SELECT foo.id, baz.description FROM foo, baz WHERE foo.baz = baz.id;
Pero mostrarles a los dos miembros del bar es difícil para mí de esta manera. ¿Algún consejo?
Suponiendo que las columnas de la tabla foo
: bar_one (fk->bar)
, bar_two (fk->bar)
, baz
no son columnas nulas , puede usar INNER JOIN
para combinar ambas tablas, pero si son anulables , utilice LEFT JOIN
lugar .
SELECT a.ID, b.name as bar_one, c.name AS bar_two, d.description FROM foo a INNER JOIN bar b ON a.bar_one = b.id INNER JOIN bar c ON a.bar_two = c.id INNER JOIN baz d ON a.baz = c.id
básicamente, INNER JOIN
solo muestra las filas que un logging tiene al less una coincidencia en cada tabla, mientras que LEFT JOIN
muestra todas las filas definen en el lado izquierdo si hay coincidencia o ninguna.