PLSQL查询图书关联作者出版商信息时返回多余数据问题
问题产生原因
- 使用了
LEFT JOIN左连接查询:左连接会保留左表(book表)的全部记录,哪怕对应没有匹配的作者、出版商数据也会作为结果返回,自然会带出大量无关联的额外记录。 - 未加筛选条件:当前查询没有任何过滤规则,如果你预期只返回示例中
Prentice Hall出版社的对应图书,没有增加出版社过滤条件的情况下,会把所有出版社的图书都查询返回。 - 隐式字段冲突风险:原代码用
select *查询所有字段,如果不同表存在同名字段,可能导致关联逻辑异常,出现重复记录。
修复方案
将左连接改为只保留同时匹配作者、出版商的内连接INNER JOIN,明确查询需要的字段,按需增加过滤条件即可,修改后完整代码如下:
set serveroutput on; declare cursor c is select b.bookid, b.title, p.publishername, a.firstname, a.lastname from book b inner join author a on a.authorid = b.author_id inner join publisher p on b.publisherid = p.publisherid -- 如果不需要限定出版社,删掉下面这行WHERE条件即可 where p.publishername = 'Prentice Hall' order by b.title asc; begin dbms_output.put_line('BOOKID'||'.............'||'TITLE'||'.............'||'publisher'||'.............'||'Author'); for i in c loop dbms_output.put_line(i.bookid||'.............'||substr(i.title,1,10)||'.............'||i.publishername||'.............'||i.firstname||' '||i.lastname); end loop; end; /
内容的提问来源于stack exchange,提问作者Roudra Akhuly
相关产品推荐
相关产品推荐

