解释一下这段代码 FROM eci_erp_shipment_info_domestic_trade a LEFT JOIN ( SELECT a.* FROM eci_app_shipment_info_domestic_trade a,( SELECT max(apply_time) apply_time ,dn1 FROM eci_app_shipment_info_domestic_trade GROUP BY dn1 ) b WHERE a.dn1=b.dn1 AND a.apply_time=b.apply_time ) b on a.dn1=b.dn1 LEFT JOIN ( SELECT a.* FROM eci_app_shipment_info_domestic_trade_alter a,( SELECT max(apply_time) apply_time ,dn1 FROM eci_app_shipment_info_domestic_trade_alter GROUP BY dn1 ) b WHERE a.dn1=b.dn1 AND a.apply_time=b.apply_time ) c ON a.dn1 = c.dn1 LEFT JOIN eci_reply_shipment_info_domestic_trade d ON d.apply_id=b.id WHERE (a.app_status=6 OR a.app_status=9) and a.del_flag='0'
时间: 2023-08-12 08:07:05 浏览: 219
这段代码是一个SQL查询语句,它从多个表中联接数据并进行筛选。让我逐步解释一下:
1. 第一行指定了主表为 `eci_erp_shipment_info_domestic_trade`,并为该表设置别名 `a`。
2. 第二行开始是第一个左连接(LEFT JOIN),将 `eci_app_shipment_info_domestic_trade` 表与主表进行联接。在这个联接中,使用了一个子查询来获取每个 `dn1` 分组中的最大 `apply_time`。子查询结果作为临时表别名为 `b`,并与表别名为 `a` 的表进行联接。联接条件是 `a.dn1 = b.dn1 AND a.apply_time = b.apply_time`。
3. 第四行开始是第二个左连接(LEFT JOIN),将 `eci_app_shipment_info_domestic_trade_alter` 表与主表进行联接。同样地,使用了一个子查询来获取每个 `dn1` 分组中的最大 `apply_time`。子查询结果作为临时表别名为 `b`,并与表别名为 `a` 的表进行联接。联接条件是 `a.dn1 = b.dn1 AND a.apply_time = b.apply_time`。这个联接的结果被命名为 `c`。
4. 最后一个左连接是将表 `eci_reply_shipment_info_domestic_trade` 与临时表别名为 `b` 的表进行联接,联接条件是 `d.apply_id = b.id`。这个联接的结果被命名为 `d`。
5. 最后一行是查询的筛选条件,通过 `a.app_status=6 OR a.app_status=9` 和 `a.del_flag='0'` 来筛选满足条件的数据。
综上所述,这段代码的目的是联接多个表,并根据指定的条件筛选出满足条件的数据。请注意,代码中使用了表别名来简化查询语句,并且使用了子查询来获取每个分组中的最大值。
阅读全文