CodeIgniter 查询构造器(query builder) - 子查询

最近开发项目时需要使用子查询,研究一番后得出结果:

<?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),需要使用子查询的形式或是在on设置条件优先过滤再join,否则会变成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 
        where TableB.age > 15) 
     AS TableB on TableA.id = TableB.a_id
  
-- 在on先对右表做过滤,再join
Select * 
From TableA 
Left Join TableB on 
     TableA.id = TableB.a_id 
     and TableB.age > 15
发布了18 篇原创文章 · 获赞 1 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_42557486/article/details/83584656