首页 > 解决方案 > 连接两个表,一个具有父子层次结构,输出提供的行数比表 1 多

问题描述

   select b.top_lvl_itm_num,
    b.grp_lvl_itm_num,
    b.cmpnt_lvl_itm_num,
    b.lvl,
    b.grp_lvl_plt,
    b.cmpnt_lvl_plt ,
    a.sys_category from v_lttt_cost b 
    left join v_lttt_sys_category_map a on b.top_lvl_itm_num=a.top_lvl_itm_num and 
    b.grp_lvl_itm_num=b.grp_lvl_itm_num and b.cmpnt_lvl_itm_num=b.cmpnt_lvl_itm_num and b.lvl=a.lvl

    where b.grp_lvl_itm_num='MV' and 
    b.cmpnt_lvl_itm_num="ON1433' and 
    b.lvl=12 and 
    b.grp_lvl_plt='1110'

这是我正在使用的代码。我应该只取回 11 行,但给了我 121 行。11 行是左表的内容。

标签: sqlduplicates

解决方案


b您在连接的两侧使用相同的别名,这会导致更多数据。

我修改了查询:

select b.top_lvl_itm_num,
    b.grp_lvl_itm_num,
    b.cmpnt_lvl_itm_num,
    b.lvl,
    b.grp_lvl_plt,
    b.cmpnt_lvl_plt ,
    a.sys_category 
from v_lttt_cost b 
left join v_lttt_sys_category_map a 
on b.top_lvl_itm_num=a.top_lvl_itm_num and 
   b.grp_lvl_itm_num=a.grp_lvl_itm_num and    
   b.cmpnt_lvl_itm_num=a.cmpnt_lvl_itm_num and 
   b.lvl=a.lvl
    where b.grp_lvl_itm_num='MV' and 
    b.cmpnt_lvl_itm_num='ON1433' and 
    b.lvl=12 and 
    b.grp_lvl_plt='1110'

更新:从您的评论看来,即使在放置 LEFT JOIN 之后,您的数据也乘以 11 倍,这意味着您在右表中的 JOIN 组合有很多行(在本例中为 11 行)。如果您的数据中有重复项,您可以使用DISTINCT子句过滤掉重复项。


推荐阅读