Oracle Database 21c Express与Developer查询结果重复显示异常求助
解决Oracle 21c Express查询重复及Enrollment表显示行数异常问题
步骤1:确认Enrollment表实际行数
先排除查询逻辑导致的显示错误,执行以下语句查看表内真实数据量:
SELECT COUNT(*) FROM enrollment;
情况A:实际行数为8(表内确实存在8条数据)
- 检查插入脚本:确认是否重复编写了
INSERT INTO enrollment语句,或脚本被多次执行且未提前清空表。 - 重置表数据:执行
TRUNCATE TABLE enrollment;清空表,再重新插入2条测试数据,执行后再次查询行数。 - 检查自动提交设置:Oracle Developer默认可能开启自动提交,若每次运行脚本未回滚,会导致重复插入。可在执行插入前添加
ROLLBACK;确保之前的操作被回滚。
情况B:实际行数为2(查询结果显示8行是逻辑错误)
这大概率是笛卡尔积导致的,通常是关联多张表时未添加正确的连接条件。比如错误的跨表查询:
-- 错误示例:无连接条件导致笛卡尔积(2学生*2课程*2选课=8行) SELECT * FROM student, course, enrollment;
修正为带外键关联的查询:
-- 正确示例:通过外键关联三张表 SELECT s.*, c.*, e.* FROM student s INNER JOIN enrollment e ON s.student_id = e.student_id INNER JOIN course c ON c.course_id = e.course_id;
额外排查点
- 检查查询语句是否包含重复的
UNION ALL或重复子查询逻辑,导致结果重复。 - 确认表中是否未设置主键/唯一约束,导致插入重复数据。
内容的提问来源于stack exchange,提问作者Muhammad Adam
相关产品推荐
相关产品推荐

