mysql - 在 MySQL 中,如何使用连接表中的单行来过滤掉 GROUP_CONCAT 中不需要的日期?

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

我有一个 loan 表和一个 loan_status 表。 loan 表包括 loan_iddate_issued 列以及其他列。这里我有一个查询,用于获取 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 中排除 loan 表中 status_id27 的任何 loan_status ,并且该 status_idloan_status 表中该 loan 的最后一个条目。每笔贷款都有多种状态。

这是一个例子:

enter image description here

此查询显示一个 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,如果是,则排除该 loan

最佳答案

我不确定我是否正确理解了您的查询,因为只有一些较大查询的一部分。不过,我建议您尝试这样的事情:

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排除此类贷款。

关于mysql - 在 MySQL 中,如何使用连接表中的单行来过滤掉 GROUP_CONCAT 中不需要的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51790462/

相关文章:

MySQL 从过去 30 天中选择不选择今天的结果

mysql - MySQL 5.6 优化 SQL 查询

php - 调用未定义函数 mysql_real_escape_string()

sql - postgresql group by 和 inner join

php - 使用从数据库检索的信息创建 JSON 数组

mysql - SQL 连接并获取表中的计数

mysql - 使用 ORDER BY id DESC 在 Max Date 值上进行 LEFT JOIN

php - 连接mysql中的两个表并在表中显示答案

mysql - 需要在Access中查看表1中的数据,其中ID与表2中的ID匹配

mysql - 多案例内连接查询