A chave estrangeira fornece um link para outro registro na mesma ou em outra tabela (geralmente a última). Uma junção usa dados comuns em duas tabelas (às vezes a mesma tabela) para fornecer um link entre elas.
Se você tiver duas tabelas que deseja unir e o único fator comum entre essas duas tabelas estiver em uma terceira tabela (aquela com todas as chaves estrangeiras), você precisará realizar 2 uniões.
Exemplo
SELECT *.table1, *.table2 FROM table1
LEFT JOIN foreign_key_table ON foreign_key_table.id1 = table1.id
LEFT JOIN table2 ON foreign_key_table.id2 = table2.id
WHERE.....
No Codeigner:
$this->db->select('*.table1, *.table2');
$this->db->from('table1');
$this->db->join('foreign_key_table', 'foreign_key_table.id1 = table1.id');
$this->db->join('table2', 'foreign_key_table.id2 = table2.id');
$this->db->where('...');
Você pode encontrar todas as informações necessárias aqui - http://codeigniter.com/user_guide/database /active_record.html
Espero que isto ajude.