如果条件不适用于该小组

时间:2019-08-11 11:24:57

标签: mysql sql

我有三个表,分别是tbl_lead, tbl_documentsPickuptbl_bankdata

tbl_lead表与tbl_documentsPickuplead_idtbl_bankdata连接。我在tbl_lead桌上有个人信息,在tbl_documentsPickup上有文件信息,在tbl_bankdata上有银行信息。银行信息可以包含一个以上的记录。

现在我必须显示所有表中的记录,因此我正在使用joinsgroup by

为什么group by因为在tbl_bankdata中我有多个相同用户的记录。所以我必须将lead_id分组。

我在tbl_lead中有3条记录,在tbl_documentsPickup中有3条记录,在tbl_bankdata中有5条记录。我正在使用分组正确的3条记录。

所以我的查询是

SELECT * 
  FROM tbl_lead 
  LEFT JOIN tbl_documentsPickup ON tbl_lead.c_id=tbl_documentsPickup.lead_id  
  LEFT JOIN (
             SELECT lead_id, b_bankDoneStatus, max(date_of_added) as latest 
               FROM tbl_bankdata 
              GROUP BY lead_id) r 
         ON tbl_lead.c_id=r.lead_id  
      ORDER BY tbl_lead.date_of_created DESC;

使用上面的代码,我得到正确的输出。我正在获取每条记录。现在,我必须设置where条件。

我的问题是,我在表statusDone中有一个名为tbl_bankdata的列。如果statusDone为0,则显示记录,否则不显示记录。

我尝试了

如果到此组使用statusDone = 0,则获取所有记录;或者如果我使用r.statusDone = 0,则获取错误Unknown column 'r.statusDone' in 'where clause'

我正在使用Codeigniter。我刚刚分享了我的SQL查询。

1 个答案:

答案 0 :(得分:1)

我认为您需要在子查询中(也在statusDone中包括GROUP BY list列:

SELECT * 
   FROM tbl_lead l
   LEFT JOIN tbl_documentsPickup dp ON l.c_id = dp.lead_id  
   LEFT JOIN (
              SELECT lead_id, statusDone, max(date_of_added) as latest 
                FROM tbl_bankdata 
               GROUP BY lead_id, statusDone     
              HAVING max(`date_of_added`) = latest              
              ) bd 
          ON l.c_id = bd.lead_id 
       WHERE bd.statusDone = 0
       ORDER BY l.date_of_created DESC;