podzapytanie w jednym wierszu zwraca więcej niż jeden wiersz - jak znaleźć duplikat?


Nie jestem wielkim ekspertem od Oracle - SQL, więc mam nadzieję, że ktoś zna dobry sposób na znalezienie „duplikatu” wpisu, który wywołuje

podzapytanie: jeden wiersz zwraca więcej niż jeden błąd wiersza

.
To jest moje oświadczenie:
SELECT
CAST(af.SAP_SID AS VARCHAR2(4000)) APP_ID,
(SELECT DR_OPTION
FROM
DR_OPTIONS
WHERE DR_OPTIONS.ID = ( select dr_option from applications where applications.sap_sid = af.sap_sid)) DR_OPTION
FROM
APPLICATIONS_FILER_VIEW af

działa na moim systemie testowym, więc jestem „pewien”, że w dostępnych rekordach danych musi być błąd, ale nie mam pojęcia, jak je znaleźć.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Spróbuj z tym zapytaniem:
select applications.sap_sid, count(dr_option) 
from applications
group by applications.sap_sid
having count(dr_option) > 1

Powinno to dać sap_sid zduplikowanych wierszy
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Proponuję uprościć zapytanie:
SELECT CAST(af.SAP_SID AS VARCHAR2(4000)) APP_ID,
dr.DR_OPTION
FROM APPLICATIONS_FILER_VIEW af
INNER JOIN applications a ON af.sap_sid = a.sap_sid
INNER JOIN DR_OPTIONS dr ON a.dr_option = dr.ID
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zbadałbym, co otrzymujesz, kiedy biegasz:
select dr_option from applications where applications.sap_sid = af.sap_sid

ale możesz wymusić zwrócenie tylko jednego wiersza (widzę to jako fikcję i nie polecam go używać, przynajmniej dodaj porządkowanie, aby mieć kontrolę nad zwracanym wierszem) z czymś takim:
SELECT
CAST(af.SAP_SID AS VARCHAR2(4000)) APP_ID,
(SELECT DR_OPTION
FROM
DR_OPTIONS
WHERE DR_OPTIONS.ID = ( select dr_option
from applications
where applications.sap_sid = af.sap_sid
and rownumber = 1)
) DR_OPTION
FROM
APPLICATIONS_FILER_VIEW af

(nie testowano, tylko wygooglowałem, jak ograniczyć wyniki w wyroczni)
Jeśli naprawisz problem z danymi (zgodnie z komentarzem A.B. Cadesa), zaleciłbym przekonwertowanie go na użycie złączeń zgodnie z odpowiedzią weenoida. zwróci również uwagę na inne problemy z danymi, które mogą pojawić się w przyszłości.
Krótko mówiąc: nigdy niczego nie naprawiłem w ten sposób ... prawdziwą odpowiedzią jest sprawdzenie wielu zwróconych wierszy i podjęcie decyzji, co chcesz zrobić.:
  • dodaj dodatkowe klauzule gdzie
  • uporządkuj wyniki i wybierz tylko górny wiersz
  • w rzeczywistości zachowaj duplikaty w sposób, w jaki reprezentują scenariusz, o którym wcześniej nie pomyślałeś

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się