Oracle 视图中出现重复记录(left join)

2023-11-17

Oracle 视图中出现重复记录

问题

今天做项目的时候,客户反映页面中出现了重复的数据。经排查后发现前短数据新增的字段,来自于应该新的表。当时是直接使用 left join 左连接的方式对数据进行拼接的。

left join 左连接本身是不会造成重复数据的,但是如果我们左连接的条件在右边的表格中不是主键(可能重复出现),那么我们最后的数据就可能会增多。
如下图 用户表和部门表,如果我们是根据部门名让两个表进行左连接,就会出现多的记录。
用户表 left join 部门表 on 用户表.部门名 =部门表.部门名
在这里插入图片描述
在这里插入图片描述

如下就是查出来的记录:
在这里插入图片描述

这个时候如果我们的前台只需要学号,姓名,部门。那么其显示的数据对客户而言就是重复的。如下:
在这里插入图片描述

解决办法

办法1: 换左连接的条件 向上面的例子,换成用户表 left join 部门表 on 用户表.部门id =部门表.部门id 。因为部门id是唯一的主键,这样连接后肯定不会有重复的。

办法2: 有的时候前一个表中确实没有右边表中的主键字段,无法换左连接条件。
可以考虑使用 distinct 函数
SELECT DISTINCT可以用来过滤结果集中的重复行,
用户表 left join (SELECT distinct mse.部门名 FROM 部门名 mse)
我们使用 distinct 函数 先对将要进行左连接的表,根据连接条件进行筛选,如果有重复的部门名进行只保留用户。distinct筛选之后,部门的表就变成了

在这里插入图片描述

这个时候再进行左连接:

在这里插入图片描述

前端选取相应的数据就是:

在这里插入图片描述

这样就能保证前端页面数据的唯一性。

注意

方法2 使用distinct 其实就是根据我们给的条件 如:部门名,把下面部门名重复的行记录删除。因为我们上面不同部门id下的部门名和职责是一样的。所以我们只需要获取一个就行了,不用管获取到的是哪个部门id下的部门名和职责。 因为我们前端页面需要的字段就是学号,姓名,就行对应的部门名和职责。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oracle 视图中出现重复记录(left join) 的相关文章

  • SELECT DISTINCT 和 SELECT UNIQUE 之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 Oracle 9i 中的唯一与不同多列 https stackoverflow com questions 174912 unique vs distinct multi column in orac
  • 在查询中使用别名导致“命令未正确结束”

    我试过这个 SELECT FROM SELECT ROW NUMBER OVER ORDER BY vernum DESC defvern DESC AS RowNumber FROM MyTable INNER JOIN AnotherT
  • Oracle SQL:从表中选择数据和分区名称并截断分区

    这是一个由两部分组成的问题 1 是否可以根据数据所在的分区使用 select 语句检索其名称ROWID或者其他一些标识符 eg SELECT DATA ID CATEGORY VALUE PARTITION NAME FROM MYTABL
  • 如何使用过程填充数据库

    我有大约 15 个不同的表 其中填充了不同的数据和不同的实体关系 我需要创建一个脚本 用这些表的内容填充我的数据库 脚本完成后 我使用 sqlplus 在 cmd 中运行它 然后使用 START文件路径 我有两个不同的 sql 文件 一个名
  • MySQL 相当于 ORACLES 的rank()

    Oracle 有 2 个函数 rank 和dense rank 我发现它们对于某些应用程序非常有用 我现在正在 mysql 中做一些事情 想知道他们是否有与这些相同的东西 没有什么直接等效的 但你可以用一些 不是非常有效的 自连接来伪造它
  • SQL 连接中的多个条件

    如何指定多个条件SQL加入 我知道A key B key除此之外是强制性的 以下对于指定多个条件是否正确SQL ON A key B key and or cond1 and or cond2 etc OR ON A key B key w
  • PL/SQL:如何声明会话变量?

    如何在 PL SQL 中声明一个会话变量 该变量仅在会话期间持续存在 而无需将其存储在数据库本身中 您可以使用 用户创建的上下文 来存储会话中多个单元共享的数据 首先 创建一个上下文 CREATE CONTEXT SYS CONTEXT u
  • sql 查询查找匹配属性

    我目前正在做一个类似易货系统的系统 情况是这样的 客户 Jasmine 要求输入 NAME 属性 她需要寻找的内容 并输入 SEEK 属性 她需要寻找的内容 为了获得结果 SEEK 属性必须与其他客户的 Name 属性匹配 其他客户的 SE
  • 使用 Oracle 中的 Join 查询进行更新

    查询有什么问题 它无限期地执行 UPDATE table1 t1 SET t1 col t1 Output SELECT t2 col t3 Output t2 col FROM tabl2 t3 LEFT JOIN table1 t2 O
  • 如何使用 Hibernate 3.3.2GA 将 TIMESTAMP WITH TIME ZONE 映射到 Java 数据类型?

    如何映射 Oracle 列类型TIMESTAMP WITH TIME ZONE http download oracle com docs cd B19306 01 server 102 b14225 ch4datetime htm i10
  • 为什么我的层次结构查询显示重复记录?

    我的要求是找到一个月中所有过去的天数 以下是我的示例查询 CREATE TABLE custom date full sno NUMBER curr date DATE INSERT INTO custom date full VALUES
  • PL/SQL 触发器问题

    我正在尝试编写一个触发器来填充包含员工更新工资信息的表 我现在遇到一个无法解决的问题 这是要填充的表 drop table SalUpdates cascade constraints create table SalUpdates Sal
  • java.library.path 中没有 ocijdbc12

    我正在尝试使用 OCI 驱动程序通过 java 程序连接到 oracle 以下是配置 Windows 7 32 位 JDK 1 7 Oracle 客户端 11g R2 ojdbc7 jar在我的独立应用程序的类路径中 但我收到以下异常 Ex
  • 将行连接成 CLOB

    关于这个主题有很多类似的问题 但我找不到任何解决方案来考虑最终结果对于 varchar2 来说太大的任何问题 所以我想做的就是改变这一点 Column1 Column2 1 Hello 1 world 1 please help 2 Tha
  • Oracle SQL - 将 oracle sql 中的 id 更新为按顺序排列

    我在 Oracle SQL 中有一个表 其 id 按递增顺序排列 但由于编辑原因 id 中存在间隙 例如id 目前类似于 22 23 24 32 33 44 etc 我想通过浏览表中的每一行并更新它们来修复这些差距 这样就不会有差距 最好的
  • Oracle使用with子句创建表

    我可以从使用形成的查询创建表吗with clause Sure CREATE TABLE t AS WITH some data AS SELECT 1 as some value FROM dual UNION ALL SELECT 2
  • Oracle group by 中的字符串聚合

    我已经形成了一个大型查询 它使用以下数据条件获取大型数据集 Column1 Column2 M1 OTH M1 HHM M1 RES M2 HHM M2 RES M3 OTH M3 RES 我需要将其形成为 M1 OTH HHM RES M
  • (PLSQL) 在 Oracle 更新触发器中测试更改值的最简单表达式是什么?

    这是一个可以解决问题的布尔表达式 nvl new location old location new location is null old location is null 但我想有一个更简单的表达方式 有任何想法吗 这些较短的方法都有
  • SQL*Loader - 如何忽略具有特定字符的某些行

    如果我有一个以下格式的 CSV 文件 fd sdf dsfds dsfd fd asdf dsfds dsfd fd sdf rdsfds dsfd fdd sdf dsfds fdsfd fd sdf dsfds dsfd fd sdf
  • Oracle - 仅当不存在时才创建索引

    有没有什么方法可以在oracle中创建索引 只有当它们不存在时 就像是 CREATE INDEX IF NOT EXISTS ord customer ix ON orders customer id 仅当索引不存在时添加索引 declar

随机推荐