如何防止在选择查询中选择重复行?

时间:2011-05-19 20:22:57

标签: oracle duplicate-removal

我被赋予了从Oracle数据库中选择密钥数据的任务,但我注意到我的select正在返回重复的行。我不需要它们用于我的报告但我不希望它们删除它们。有人可以帮助只获取我需要的数据。我尝试了以下代码,但这没有帮助。

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')

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

如果查看转换为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')