我有三个表,分别是tbl_lead, tbl_documentsPickup
和tbl_bankdata
。
tbl_lead
表与tbl_documentsPickup
和lead_id
与tbl_bankdata
连接。我在tbl_lead
桌上有个人信息,在tbl_documentsPickup
上有文件信息,在tbl_bankdata
上有银行信息。银行信息可以包含一个以上的记录。
现在我必须显示所有表中的记录,因此我正在使用joins
和group 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查询。
答案 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;