在MySQL中,如何使用联接表中的一行来过滤GROUP_CONCAT中不需要的日期?

时间:2018-08-10 16:18:09

标签: mysql left-join inner-join outer-join

我有一个loan表和一个loan_status表。 loan表除其他列外还包括loan_iddate_issued列。在这里,我有一个查询,该查询获取{strong> OTHER 贷款的date_issued

(select GROUP_CONCAT(Date(lj.date_issued) SEPARATOR ', ') from loan lj INNER JOIN client clj ON (clj.client_id = lj.client_id) 

where clj.client_id = '2299629' and lj.id != l.id) as other_loan_issue_dates,

由于该客户有7笔贷款,所以我有一个这样的表格,其中用6个逗号分隔:

enter image description here

问题:

我需要从other_loan_issue_dates表中排除loanstatus_id的{​​{1}}为27的任何loan_status status_idloan_status表中的最后一个条目。每笔贷款都有许多状态。

这里是一个例子:

enter image description here

此查询显示一个loan列,该列确定是否应在test中将其过滤掉:

other_loan_issue_dates

以下是错误的并且无法完成运行:

select status_id = 27 as test from loan_status ls where loan_id = 2052456 ORDER BY datestamp DESC LIMIT 1;

我也尝试了以下方法,但我不知道它是否有效,因为它似乎会使结果相乘:

(select GROUP_CONCAT(Date(lj.date_issued) SEPARATOR ', ') from loan lj INNER JOIN client clj ON (clj.client_id = lj.client_id) 

JOIN loan_status ls ON ls.status_id = (
select status_id from loan_status ls where loan_id = 2052456 ORDER BY datestamp DESC LIMIT 1
)

where clj.client_id = '2299629' and lj.id != l.id and ls.status_id != 27) as other_loan_issue_dates,

如何使用最后的(select GROUP_CONCAT(Date(lj.date_issued) SEPARATOR ', ') from loan lj INNER JOIN client clj ON (clj.client_id = lj.client_id) LEFT OUTER JOIN loan_status ls ON (ls.loan_id = lj.id) where clj.client_id = '2299629' and lj.id != l.id and (select status_id = 27 as test from loan_status ls where loan_id = ls.loan_id ORDER BY datestamp DESC LIMIT 1) = 0) as other_loan_issue_dates, 行,检查其loan_status是否为status_id,如果是,则排除该27

1 个答案:

答案 0 :(得分:0)

我不确定我的查询是否正确,因为一些较大的查询中只有一部分。但是,我建议您尝试这样的操作:

SELECT GROUP_CONCAT(Date(lj.date_issued) SEPARATOR ', ')
FROM loan lj
INNER JOIN client clj ON (clj.client_id = lj.client_id) 
WHERE clj.client_id = '2299629'
AND lj.id != l.id
AND lj.loan_id NOT IN (SELECT loan_id from loan_status WHERE status_id = 27)

SELECT loan_id from loan_status WHERE status_id = 27将为您提供具有status_id=27的贷款ID。然后,您放置NOT IN来告诉MySQL排除此类贷款。

相关问题