最近開發項目時需要使用子查詢,研究一番後得出結果:
<?php
// Sub Query
$this->db->select('*');
$this->db->from('TableB');
$subQuery = $this->db->get_compiled_select();
// Main Query
$this->db->select('*');
$this->db->from('TableA');
$this->db->join("($subQuery) AS TableB", 'TableA.id = TableB.a_id');
$r = $this->db->get();
return $r->result_array();
?>
另外也發現一個情形:
TableA LEFT JOIN TableB on TableA.id=TableB.a_id,如果TableB有限制條件(ex. WHERE TableB.age > 15),需要使用子查詢的形式,否則會變成Inner Join。
-- 變成Inner Join
Select *
From TableA
Left Join TableB on TableA.id = TableB.a_id
Where
TableB.age > 15
-- Left Join正確的結果
Select *
From TableA
Left Join (Select * From TableB TableB.age > 15) AS TableB on TableA.id = TableB.a_id