繁体   English   中英

如何通过选择第一个表中的整个值和第二个表中的一些值来联接多个表

[英]How to join multiple tables by selecting the whole values in the first table and some values in the second table

我的SQL查询出现问题。 我试图从用户表中获取所有值,并将本月他们在贷款表上收集的贷款加起来,但是每次运行查询时,我都会出错。

这是SQL查询

SELECT * FROM customer c 
     INNER JOIN(SELECT SUM(loan_amt) as lamt, disb_date, ac_no FROM loans GROUP BY ac_no) AS l ON c.cust_no=l.ac_no

拜托,我在做什么错? 谢谢。

尝试这个:

SELECT c.*,l.lamt FROM customer c INNER JOIN(SELECT SUM(loan_amt) as lamt, disb_date, ac_no FROM loans GROUP BY ac_no,disb_date) AS l ON c.cust_no=l.ac_no

您在select中选择的列比在group bygroup by 所以:

SELECT c.*, l.lamt
FROM customer c LEFT JOIN
     (SELECT SUM(loan_amt) as lamt, ac_no
      FROM loans
      GROUP BY ac_no
     ) l
     ON c.cust_no = l.ac_no;

请注意,我还将LEFT JOIN更改为LEFT JOIN 您的问题专门说“所有行”,这表示即使没有贷款的行也是如此。

我同意Gordon linoff。 这是因为您的group by即使在子查询的select部分中也不包含disb_date。 但是,您不希望将其添加到组中,因为它可能不会产生正确的结果。

我猜您想要disb_date,因为您想检索特定月份的贷款。 这个对吗? 如果是这样,我将在Gordon解决方案中添加一个where子句:

SELECT c.*, l.lamt
FROM customer c LEFT JOIN
     (SELECT SUM(loan_amt) as lamt, ac_no
      FROM loans WHERE disb_date BETWEEN <insert date> AND <insert date>
      GROUP BY ac_no
     ) l
     ON c.cust_no = l.ac_no;

这将调出仅在您指定月份收集的贷款总额。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM