sql - 连接两个表,一个具有父子层次结构,输出提供的行数比表 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 行是左表的内容。
解决方案
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
子句过滤掉重复项。
推荐阅读
- linux - 如何使用 Bash 将柱状标记数据转换为 json?
- django - 如何自动更新 ForeignKeys 以具有“, on_delete=models.PROTECT”
- mysql - SQL 替换语句的正确 MariaDB 语法
- python - SQLAlchemy - Session.merge() 返回重复的密钥完整性错误
- java - 如何获取 Google Play 订阅付款
- html - 如何仅使用 CSS 从 iFrame 中将图标粘贴到屏幕底部?
- c++ - C++ Aws S3 IOStream 在传递时被破坏。有没有办法防止这种情况发生?
- google-sheets - Google表格查询中一列中的ROUNDUP SUM值
- python - Django:有没有办法取消接收器触发特定模型信号?
- awk - awk 中的格式用完了