2011-05-19 9 views
6

Se me ha dado la tarea de seleccionar datos clave de una base de datos Oracle, pero me doy cuenta de que mi selección devuelve filas duplicadas. No los necesito para mi informe, pero no quiero que los eliminen. ¿Alguien podría ayudarme a obtener solo los datos que necesito? He intentado con el siguiente código, pero esto no ayuda.¿Cómo puedo evitar que se seleccionen filas duplicadas en una consulta de selección?

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

Respuesta

5

Si observa la consulta traducida al SQL Server tipo SQL, verá que no hay relación entre su tabla bofcs y el resto de sus datos. Básicamente está devolviendo cada registro en el campo de temperatura de los bofcs, y eso puede estar produciendo resultados duplicados ?.

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

Buena captura, nunca vi eso. Es una unión cartesiana completa, no es de extrañar que haya mucha duplicación :) – Datajam

+0

Gracias fue un gran paso en la dirección correcta. Noté algunas otras desconexiones con la base de datos en sí misma debido a eso. –

+0

Ver 'distinct' en una consulta debería sonar las alarmas. Por lo general, cubre algunos problemas en la consulta o en el diseño de la base de datos. –

6

Si la instrucción SELECT tiene un DISTINCT en él, entonces todos los registros devueltos tener una combinación única de valores a través de las columnas que está seleccionando. Debe identificar qué columnas devuelven valores diferentes en los registros que considera duplicados.

Cuestiones relacionadas