首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我在sql select查询中记录错误

我在sql select查询中记录错误
EN

Stack Overflow用户
提问于 2016-06-13 08:21:37
回答 3查看 140关注 0票数 3

我想从MySQL中选择数据。还想在查询执行时做一些计算。我有两个SQL表:

贷款表:

代码语言:javascript
运行
复制
loan_id|Customer_name|Total_amount|Collector
1000   |Sashika      |55000       |Kapoor
1001   |Amell        |11000       |Kapoor
1002   |Oliver       |15000       |Kapoor

结算表:

代码语言:javascript
运行
复制
Sett_id|Loan_id|Amount
a123    |1000    |1000
b123    |1000    |1000

特别是我想指出的是,1001 & 1002贷款还没有收到任何结算。,我想按收集人的名字选择贷款。选择应该是这样的:

输出表

代码语言:javascript
运行
复制
Loan_ID| Customer_Name|Total_Amount|Total_Received|Total_Due
1000   |Sashika       |55000       |2000          |53000
1001   |Amell         |11000       |0             |11000
1002   |Oliver        |15000       |0             |15000

要做到这一点,我使用下面的选择查询。但它只显示1000(loan_id)记录。我想是因为只有1000人(Loan_id)有结算记录。1001和1002没有任何记录,这就是为什么它没有显示。但我的要求是加载所有贷款细节,如上面的输出表。

目前,我使用以下代码:

代码语言:javascript
运行
复制
select
loan.loan_id as 'Loan ID'
   ,loan.customer_name as 'Customer Name'
   ,loan.total_amount as 'Total Amount'
   ,ifnull(sum(settlement.amount),0) as 'Total Received'
   ,((loan.total_amount)-ifnull(sum(settlement.amount), 0))as 'Total Due'
from loan
inner join settlement  on  loan.loan_id =  settlement.loan_id
where loan.collector_name='kapoor'
group by loan.loan_id

就像我说的,它没有显示1001,1002 (loan_id)记录,比如Output Table

EN

回答 3

Stack Overflow用户

发布于 2016-06-13 08:29:44

在本例中,上述两个表之间需要左联接。

代码语言:javascript
运行
复制
select
 loan.loan_id AS 'Loan ID',
 loan.customer_name AS 'Customer Name',
 loan.total_amount AS 'Total Amount',
 ifnull(sum(settlement.amount),0) AS 'Total Received',
((loan.total_amount)-ifnull(sum(settlement.amount), 0))as 'Total Due'

FROM
    loan
LEFT JOIN settlement ON loan.loan_id = settlement.loan_id
WHERE
    loan.collector_name = 'kapoor'
GROUP BY    loan.loan_id
票数 1
EN

Stack Overflow用户

发布于 2016-06-13 08:29:21

INNER JOIN永远不会显示在结算表中找不到的loan_ids。使用LEFT JOIN

票数 0
EN

Stack Overflow用户

发布于 2016-06-13 08:52:02

您需要起诉一个LEFT JOIN来返回您想要的数据,因为结算表中不存在loan_id10011002

另外,在表结构中,在当前代码中使用collector,在下面的代码中使用collector_name,在SQL示例中使用collector

代码语言:javascript
运行
复制
SELECT 
l.loan_id AS 'Loan ID',
l.customer_name AS 'Customer Name',
l.total_amount AS 'Total Amount',
IFNULL(SUM(s.amount),0) AS 'Total Received',
((l.total_amount) - IFNULL(SUM(s.amount), 0)) AS 'Total Due'
FROM loan l
LEFT JOIN settlement s on l.loan_id =  s.loan_id
WHERE l.collector_name = 'kapoor'
GROUP BY l.loan_id

输出:

代码语言:javascript
运行
复制
loan_id Customer_name   Total_amount    Total Received  Total Due
1000    Sashika         55000           2000            53000
1001    Amell           11000           0               11000
1002    Oliver          15000           0               15000

SQL:http://sqlfiddle.com/#!9/fe704/2/0

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37784860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档