如何将对相同表执行的两条SQL查询合并为符合左表行保留要求的单条查询
合并后SQL实现
以下是符合要求的合并查询代码,保留sku表所有符合条件的行,即使关联的country、hs_codes表无匹配数据也会返回结果:
$sql = "SELECT country.printable_name, hs_codes.hs_code FROM sku" . " LEFT OUTER JOIN country ON country.numcode = sku.c_code" . " LEFT JOIN hs_codes ON sku.base_category = hs_codes.base_category AND sku.sub_category = hs_codes.sub_category" . " WHERE sku.item_sku = 'JDJ2020'";
实现说明
- 主表为
sku,先通过WHERE条件筛选出item_sku = 'JDJ2020'的目标行,作为左表的基准数据 - 沿用原有逻辑保留
country表的左外连接,无匹配国家数据时printable_name字段返回NULL,不会丢弃sku行 - 将原有
hs_codes表的内连接改为左连接,匹配条件不变,无对应海关编码数据时hs_code字段返回NULL,满足左表数据全部返回的要求 - 一次查询即可同时获取国家名称和海关编码两个字段,无需执行两次查询
注意:原有代码拼接SQL时未在
sku后添加空格,直接拼接JOIN关键字会出现语法错误,上述代码已补充对应的空格避免该问题。
内容的提问来源于stack exchange,提问作者CodeForGood
相关产品推荐
相关产品推荐

