Mysql 无法检索左联接上的内容
我有一张表,上面有以下数据Mysql 无法检索左联接上的内容,mysql,sql,join,left-join,Mysql,Sql,Join,Left Join,我有一张表,上面有以下数据 l_id i_no dif interval amt =================================== 32 33 735 3 27774 32 34 707 3 27774 32 35 676 3 27774 id min max ============ 1 30 60 2 60 90 3
l_id i_no dif interval amt
===================================
32 33 735 3 27774
32 34 707 3 27774
32 35 676 3 27774
id min max
============
1 30 60
2 60 90
3 90 9999
我有以下数据的其他表间隔
l_id i_no dif interval amt
===================================
32 33 735 3 27774
32 34 707 3 27774
32 35 676 3 27774
id min max
============
1 30 60
2 60 90
3 90 9999
当我执行下面的查询时
select
lpt.l_Id,
d.id,
ifnull(sum(lpt.amt),0)
from
loan_repayed lpt
left join
interval d on lpt.interval = d.id
where
lpt.loan_id = 32
group by
lpt.l_id, d.id;
我期待着得到更多
l_id interval amt
=========================
32 1 0
32 2 0
32 3 83322
但我只拿到了第一排
l_id interval amt
===========================
32 3 333298
我哪里做错了谁能建议。。。。谢谢你
select lpt.l_Id, d.id, ifnull(sum(lpt.amt),0) from
loan_repayed lpt left join interval d on lpt.interval = d.id
where lpt.loan_id = 32
group by d.id,lpt.l_id;
或者。。使用having
代替where
select lpt.l_Id, d.id, ifnull(sum(lpt.amt),0) from
loan_repayed lpt left join interval d on lpt.interval = d.id
group by d.id,lpt.l_id having lpt.loan_id = 32;
试试这个:
SELECT
IFNULL(lpt.l_id, 32) AS L_ID,
d.id,
IFNULL(SUM(lpt.amt),0)
FROM `interval` AS d
LEFT JOIN loan_repayed AS lpt ON lpt.interval = d.id
GROUP BY lpt.l_id, d.id;
更新1 对于多个值,可以执行以下操作:
SELECT DISTINCT
d.l_id,
d.id,
IFNULL(l.totalamt, 0) AS totalamt
FROM
(
SELECT l.l_id, d.id
from
( -- <---------- here you list the values you want
SELECT 32 AS L_ID
UNION ALL
SELECT 32
UNION ALL
SELECT 33
UNION ALL
SELECT 34
) AS l CROSS JOIN(SELECT id from `interval`) as d
) AS d
LEFT JOIN
(
select
lpt.L_ID,
d.id,
ifnull(sum(lpt.amt),0) AS totalamt
from `interval` AS d
INNER JOIN loan_repayed lpt on lpt.interval = d.id
group by lpt.l_id, d.id
) AS l ON l.l_id = d.l_id AND d.id = l.id ;
如果我有多个l_id,比如32,33,34。。。etc@Santosh什么意思?这些不同的
l\u id
来自哪里?问题是,您必须左连接区间值
,以便从该列获取所有id,但另一个表中没有相应的l\u id
,这就是为什么我将32
或IFNULL(lpt.l\u id,32)作为l\u id
。如果存在不同的l\u id
这些id来自哪里?基本上,偿还的贷款是存储过程中的临时表。。。。如果我将数据插入其中,我会将diff列与间隔表的min和max进行比较,并沿插入相应的id…我在其中有不同的l_id。