我有2张桌子。 .expenses
和.loans_expense
。
.expense
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| title | varchar(255) | NO | | NULL | |
+-------+--------------+------+-----+---------+----------------+
.loans_expense
+------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| loan_id | varchar(255) | YES | MUL | NULL | |
| expense_id | int(11) | YES | MUL | NULL | |
| amount | decimal(10,2) | YES | | NULL | |
+------------+---------------+------+-----+---------+----------------+
我想要发生的是返回.expenses
的所有行以及来自.loans_expense
的相应值。即使,.loans_expense
中找不到记录。但是,每当我添加WHERE
查询WHERE loans_expense.loan_id = 'some_id'
时,如果在loan_id
中找不到某个.loans_expense
,它就不会返回单行。
我做了一个查询,但未能返回,因为再次出现某个loan_id
不存在
SELECT
`loans_expense`.`id` AS `id`,
`loans_expense`.`amount`,
`expenses`.`title`
FROM
`expenses`
LEFT JOIN `loans_expense` ON `loans_expense`.`expense_id` = `expenses`.`id`
WHERE
`loans_expense`.`loan_id` = '2018-00001-00001'
GROUP BY
`expenses`.`id`
我希望它返回以下内容:
当所有loan_id
存在时
+------+------------------------+---------+
| id | title | amount |
+------+------------------------+---------+
| 1 | Rice / Food | 2121.00 |
| 2 | Basic Bills(Total) | 21.00 |
| 3 | Rent | 12.00 |
| 4 | Tuition | 121.00 |
| 5 | Loan from Banks(Total) | 21.00 |
| 6 | Others(Total) | 212.00 |
+------+------------------------+---------+
当loan_id
不存在时
+------+------------------------+--------+
| id | title | amount |
+------+------------------------+--------+
| 1 | Rice / Food | |
| 2 | Basic Bills(Total) | |
| 3 | Rent | |
| 4 | Tuition | |
| 5 | Loan from Banks(Total) | |
| 6 | Others(Total) | |
+------+------------------------+--------+
某些相关记录中存在loan_id
+------+------------------------+--------+
| id | title | amount |
+------+------------------------+--------+
| 1 | Rice / Food | |
| 2 | Basic Bills(Total) | 500.00 |
| 3 | Rent | |
| 4 | Tuition | 124.00 |
| 5 | Loan from Banks(Total) | |
| 6 | Others(Total) | 147.00 |
+------+------------------------+--------+
答案 0 :(得分:3)
我想你只想要left join
:
select e.*, l.amount
from expenses e left join
loan_expenses le
on le.expense_id = e.id and le.loan_id = '2018-00001-00001';
请注意loan_id
的条件是on
子句,而不是where
子句。