Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 无法检索左联接上的内容_Mysql_Sql_Join_Left Join - Fatal编程技术网

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。