SQL/400查询需求:无匹配Client记录时保留Orders数据仅空关联列
解决方案:用左外连接保留主表数据
直接用标准SQL的LEFT JOIN(左外连接)就能解决你的问题,它会保留Orders表中符合条件的所有记录,哪怕Client表没有匹配数据,referenceNumber列自动返回NULL。
核心SQL语句如下:
SELECT o.shipper, c.referenceNumber FROM Orders o LEFT JOIN Client c ON o.mainorder = c.clientOrder AND c.ClientType = ? WHERE o.mainorder = ? AND o.Ordertype = ?
关键细节说明:
- 左连接的作用:
LEFT JOIN会以Orders表为基准,返回所有满足WHERE条件的Orders记录,关联的Client表如果没有匹配的clientOrder和ClientType,对应字段就填充NULL - 条件位置的重要性:必须把
c.ClientType = ?放在ON子句里,而不是WHERE子句。如果放到WHERE里,会过滤掉Client表无匹配时的NULL记录,等同于内连接,又会出现结果集为空的情况 - 参数对应:三个占位符
?分别对应:要查询的Orders.mainorder值、Orders.Ordertype值、Client.ClientType值
SQL/400完全支持标准SQL的LEFT JOIN语法,也可以写成LEFT OUTER JOIN,两者效果一致。
内容的提问来源于stack exchange,提问作者HMA
相关产品推荐
相关产品推荐

