Как я могу предотвратить выбор дублирующихся строк в запросе выбора? - PullRequest
6 голосов
/ 20 мая 2011

Мне было поручено выбрать ключевые данные из базы данных 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')

Ответы [ 2 ]

6 голосов
/ 20 мая 2011

Если в вашем операторе SELECT есть DISTINCT, то все возвращаемые записи имеют уникальную комбинацию значений в столбцах, которые вы выбираете. Вам необходимо определить, какие столбцы возвращают разные значения в записях, которые вы считаете дублирующимися.

5 голосов
/ 20 мая 2011

Если вы посмотрите на запрос, переведенный на 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')
...