Итак, вот ваши тестовые данные:
SQL> select * from t42
2 /
ID GRP# CODE PARENT#
---------- ---------- -------------------- ----------
0 10 US
0 30 SF 10
1 10 S
1 30 SF 10
SQL>
А вот запрос, который возвращает желаемые результаты:
SQL> select p.code
2 , c.grp# as child_grp#
3 from t42 p
4 left outer join t42 c
5 on ( c.parent# = p.grp# )
6 where p.id = &id
7 and p.grp# = &grp
8 /
Enter value for id: 0
old 6: where p.id = &id
new 6: where p.id = 0
Enter value for grp: 10
old 7: and p.grp# = &grp
new 7: and p.grp# = 10
CODE CHILD_GRP#
-------------------- ----------
US 30
US 30
SQL> r
1 select p.code
2 , c.grp# as child_grp#
3 from t42 p
4 left outer join t42 c
5 on ( c.parent# = p.grp# )
6 where p.id = &id
7* and p.grp# = &grp
Enter value for id: 0
old 6: where p.id = &id
new 6: where p.id = 0
Enter value for grp: 30
old 7: and p.grp# = &grp
new 7: and p.grp# = 30
CODE CHILD_GRP#
-------------------- ----------
SF
SQL>
"Можем ли мы переписатьзапрос на возврат одной строки вместо дубликатов? "
Конечно - при условии, что вы можете указать дополнительное бизнес-правило.
Самый простой выход - развернуть ключевое слово DISTINCT,последнее средство неработающего запроса.