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

时间:2017-04-22 12:16:49

标签: php sql sql-server

我的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

拜托,我做错了什么?感谢。

3 个答案:

答案 0 :(得分:0)

试试这个:

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

答案 1 :(得分:0)

您在select中选择的列数多于group 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。你的问题具体说“所有行”,这表明甚至没有贷款的行。

答案 2 :(得分:0)

我同意戈登林道夫。这是因为您的group by不包含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;

这将显示仅在指定月份收取的贷款总额。