【发布时间】:2017-09-06 08:51:52
【问题描述】:
我有 3 个要加入的表,但是当我在第三个表上使用 where 语句,而第三个表没有它时,它不会从第一个和第二个表返回行,即使我' m 使用左连接。
Table 1
+---------+--------------+----------+
| acc_PID | acc_name | acc_type |
+---------+--------------+----------+
| 1 | Account 1 | 1 |
| 2 | Account 2 | 1 |
| 3 | Account 3 | 2 |
| 4 | Account 4 | 1 |
+---------+--------------+----------+
Table 2
+-------------+-----------------+-----------+
| journal_PID | journal_account | trans_PID |
+-------------+-----------------+-----------+
| 1 | 1 | 1 |
| 2 | 2 | 2 |
| 3 | 1 | 3 |
+-------------+-----------------+-----------+
Table 3
+-----------+----------------+
| trans_PID | trans_location |
+-----------+----------------+
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
+-----------+----------------+
// CI query
$this->db->join('table_2 b', 'a.acc_PID = b.journal_account', 'LEFT');
$this->db->join('table_3 c', 'b.trans_PID = c.trans_PID', 'LEFT');
$this->db->where('a.acc_type', '1');
$this->db->where('c.trans_location', '1');
$this->db->group_by('a.acc_PID');
$query = $this->db->get('table_1 a');
$result = $query->result();
现在从上面的数据来看,如果我使用 ($this->db->where('c.trans_location', '1')),结果不会返回 Account 4,因为没有 acc_PID = 的数据'4' in table_2 和 table_3,但是我希望结果也返回 Account 4,即使表 2 和表 3 中没有帐户 4 的数据,没有 $this->db->where('c.trans_location', '1'),结果也显示帐户 4,但是使用 where location 语句,即使我使用左连接,它也不会返回表 1 中的行,它不应该也返回表 1 的结果吗?
提前谢谢你。
【问题讨论】:
-
尝试在 join 中添加条件,而不是在 where 子句中。
-
@AmiteshKumar 愚蠢的我!谢谢您,先生,请写下您的答案,以便我接受。
-
@AmiteshKumar 等等,如果我使用'LEFT',仍然没有显示表2和表3中没有数据的帐户,但如果我不使用'LEFT',它返回所有位置的所有 trans,而我只需要 trans_location ='1';
标签: php mysql codeigniter join