MySQL中基于双字段校验用户权限及现有SQL语句简化问询
你的SQL完全可以简化!
咱们先拆解下原SQL的逻辑:它先分别筛选出指定PO(WPO-01502)的发货记录,以及指定chat_id(12345667)的用户配置,再通过销售组织和客户编码做左连接。其实完全不用嵌套子查询,直接把过滤条件整合到主查询的JOIN和WHERE里,代码会简洁很多,可读性也更强。
简化后的SQL写法
SELECT t1.*, t2.* FROM ztelegram.ShipmentDel t1 LEFT JOIN ztelegram.noti_setting t2 ON t1.sales_org = t2.vkorg AND t1.Sold_to_party_name = t2.kunnr AND t2.chat_id = '12345667' WHERE t1.Cust_PO = 'WPO-01502'
简化说明
- 去掉冗余子查询:原SQL里的两个子查询只是单纯做过滤,完全可以把
t2.chat_id = '12345667'放到左连接的ON子句中,把t1.Cust_PO = 'WPO-01502'放到主查询的WHERE里,效果和原SQL完全一致。 - **可选优化:明确字段而非SELECT ***:如果你的业务不需要两张表的所有字段,建议把
SELECT *改成具体需要的字段(比如t1.Cust_PO, t1.sales_org, t2.kunnr),这样不仅能提升查询性能,还能避免后续表结构变化带来的意外问题。 - 按需调整JOIN类型:如果你的需求是只保留同时匹配用户配置的发货记录,而不是所有PO的记录,还可以把
LEFT JOIN改成INNER JOIN,结果会更贴合实际业务场景。
内容的提问来源于stack exchange,提问作者Wahsei
相关产品推荐
相关产品推荐

