【问题标题】:How can i prevent duplicate rows being selected in a select query?如何防止在选择查询中选择重复行?
【发布时间】:2011-08-29 04:43:26
【问题描述】:

我的任务是从 Oracle 数据库中选择关键数据,但我注意到我的选择返回了重复的行。我的报告不需要它们,但我不希望他们删除它们。有人可以帮助仅获取我需要的数据。我已经尝试了以下代码,但这没有帮助。

SELECT distinct bbp.SUBCAR "Treadwell",
       bbp.BATCH_ID "Batch ID",
       bcs.SILICON "Si",
       bcs.SULPHUR "S",
       bcs.MANGANESE "Mn",
       bcs.PHOSPHORUS "P",
       to_char(bcs.SAMPLE_TIME, 'dd-MON-yy hh24:MI') "Sample Time",
       to_char(bbp.START_POUR, 'dd-MON-yy hh24:MI') "Start Pour Time",
       to_char(bbp.END_POUR, 'dd-MON-yy hh24:MI') "End pour Time",
       bofcs.temperature "Temperature"
FROM  bof_chem_sample bcs, bof_batch_pour bbp, bof_celox_sample bofcs
WHERE bcs.SAMPLE_CODE= to_char('D1')
AND bbp.BATCH_ID=bcs.BATCH_ID
AND bcs.SAMPLE_TIME>=to_date('01-jan-10')

【问题讨论】:

    标签: oracle duplicate-removal


    【解决方案1】:

    如果您的 SELECT 语句中包含 DISTINCT,则所有返回的记录在您选择的列中都有唯一的值组合。您需要确定哪些列在您认为重复的记录中返回不同的值。

    【讨论】:

      【解决方案2】:

      如果您查看转换为 SQL Server 类型 SQL 的查询,您会发现您的 bofcs 表与其余数据之间没有任何关系。基本上它会返回 bofcs 温度字段中的每条记录,这可能会产生重复的结果?。

      SELECT
           bbp.SUBCAR "Treadwell", 
           bbp.BATCH_ID "Batch ID", 
           bcs.SILICON "Si", 
           bcs.SULPHUR "S",
           bcs.MANGANESE "Mn", 
           bcs.PHOSPHORUS "P", 
           to_char(bcs.SAMPLE_TIME,'dd-MON-yy hh24:MI') "Sample Time", 
           to_char(bbp.START_POUR, 'dd-MON-yy hh24:MI') "Start Pour Time",
           to_char(bbp.END_POUR, 'dd-MON-yy hh24:MI') "End pour Time", 
           bofcs.temperature "Temperature"
      FROM 
           bof_chem_sample bcs, 
      INNER JOIN 
           bof_batch_pour bbp,
      ON
           bbp.BATCH_ID=bcs.BATCH_ID
      INNER JOIN
           bof_celox_sample bofcs
      ON
           **-- NO RELATION B/N BOFCS and the other tables????**
      WHERE 
           bcs.SAMPLE_CODE= to_char('D1') AND 
           bcs.SAMPLE_TIME>=to_date('01-jan-10')
      

      【讨论】:

      • 很好,我从来没有发现过。这是一个完整的笛卡尔连接,难怪有很多重复:)
      • 感谢这是朝着正确方向迈出的一大步。因此,我注意到与数据库本身的其他一些断开连接。
      • 在查询中看到distinct 可能会敲响警钟。通常是在查询或数据库设计中掩盖了一些问题。
      • 如何查看转换为 SQL Server 类型 SQL 的查询?
      猜你喜欢
      • 2016-06-09
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-31
      • 1970-01-01
      • 2020-09-03
      相关资源
      最近更新 更多