Нужна помощь оператора SQL JOIN - PullRequest
0 голосов
/ 13 декабря 2018

Я создаю отчет, в котором должны быть указаны как основной, так и дополнительный идентификаторы.Но также необходимо указать контактную информацию идентификаторов основного лица и альтернативных пользователей.В отчете, который я создал прямо сейчас, перечислены только контактные данные идентификатора основного лица, но показан альтернативный номер.Может ли кто-нибудь помочь мне в исправлении моего sql, чтобы в нем содержалась контактная информация как первичного, так и альтернативного пользователей, а не только первичная.Sql у меня ниже.

            SELECT "ORG_ACCOUNT".ACCOUNT_NUMBER AS "Account Number",
                   "ORG_PERSON".ADDRESS_2 AS "Address",
                   "ORG_ACCOUNT".DODAAC AS "Dodaac",
                   "ORG_DODAAC".DRA AS "Dra",
                   "ORG_PERSON".EMAIL AS "Email",
                   "ORG_PERSON".FIRST_NAME AS "First Name",
                   "ORG_PERSON".LAST_NAME AS "Last Name",
                   "ORG_PERSON".LAST_TRAIN_DATE AS "Last Train Date",
                   "ORG_PERSON".MIDDLE_NAME AS "Middle Name",
                   "ORG_ALT_ACCOUNT_CUST".PERSON_ID AS "Alt Person Id",
                   "ORG_ORG".ORG_NAME AS "Org Name",
                   "ORG_ACCOUNT".PERSON_ID AS "Person Id",
                   "ORG_PERSON".PHONE_COM AS "Phone Com",
                   "ORG_PERSON".PHONE_DSN AS "Phone Dsn",
                   "ORG_PERSON".RANK AS "Rank"
           FROM "ORG"."ORG_ACCOUNT" "ORG_ACCOUNT",
                "ORG"."ORG_DODAAC" "ORG_DODAAC",
                "ORG"."ORG_ORG" "ORG_ORG",
                "ORG"."ORG_PERSON" "ORG_PERSON"
                "ORG"."ORG_ALT_ACCOUNT_CUST" "ORG_ALT_ACCOUNT_CUST"
           WHERE ( ( "ORG_PERSON".PERSON_ID(+) = ORG_ALT_ACCOUNT_CUST".PERSON_ID )
             AND   ( "ORG_ORG".ORG_ID = "ORG_ACCOUNT".ORG_ID ) 
             AND   ( "ORG_PERSON".PERSON_ID = "ORG_ACCOUNT".PERSON_ID )
             AND   ( "ORG_ALT_ACCOUNT_CUST".PERSON_ID = "ORG_ACCOUNT".PERSON_ID )
             AND   ( "ORG_DODAAC".DODAAC = "ORG_ACCOUNT".DODAAC ) ) 
             AND   ( UPPER("ORG_ACCOUNT".DODAAC) LIKE UPPER(:DODAAC) 
             AND    "ORG_DODAAC".DRA IN ( :P_DRA_ENTRIES)
             AND     UPPER("ORG_ACCOUNT".DODAAC_COMMODITY) = UPPER('A') )
           ORDER BY "ORG_DODAAC".DRA ASC, "ORG_ACCOUNT".ACCOUNT_NUMBER ASC, "ORG_PERSON".LAST_NAME ASC

1 Ответ

0 голосов
/ 13 декабря 2018

Когда вы хотите присоединиться к таблице дважды, как вы делаете это с ORG_PERSON, вам нужно дважды перечислить ее в предложении FROM (с разными псевдонимами).

SELECT ORG_ACCOUNT.ACCOUNT_NUMBER AS "Account Number",
                   ORG_PERSON.ADDRESS_2 AS "Address",
                   ORG_ACCOUNT.DODAAC AS "Dodaac",
                   ORG_DODAAC.DRA AS "Dra",
                   ORG_PERSON.EMAIL AS "Email",
                   ORG_PERSON.FIRST_NAME AS "First Name",
                   ORG_PERSON.LAST_NAME AS "Last Name",
                   ORG_PERSON.LAST_TRAIN_DATE AS "Last Train Date",
                   ORG_PERSON.MIDDLE_NAME AS "Middle Name",
                   ORG_ALT_ACCOUNT_CUST.PERSON_ID AS "Alt Person Id",
                   ORG_ORG.ORG_NAME AS "Org Name",
                   ORG_ACCOUNT.PERSON_ID AS "Person Id",
                   ORG_PERSON.PHONE_COM AS "Phone Com",
                   ORG_PERSON.PHONE_DSN AS "Phone Dsn",
                   ORG_PERSON.RANK AS "Rank",
                   alt_person.address_2 as "Alt Address",
                   alt_person.email as "Alt Email",
                   alt_person.first_name as "Alt First Name",
                   alt_person.last_name as "Alt Last Name",
                   alt_person.phone_com as "Alt Phone"
           FROM "ORG".ORG_ACCOUNT ORG_ACCOUNT,
                "ORG".ORG_DODAAC ORG_DODAAC,
                "ORG".ORG_ORG ORG_ORG,
                "ORG".ORG_PERSON ORG_PERSON
                "ORG".ORG_ALT_ACCOUNT_CUST ORG_ALT_ACCOUNT_CUST,
                "ORG".ORG_PERSON alt_person
           WHERE ( ( alt_person.PERSON_ID(+) = ORG_ALT_ACCOUNT_CUST.PERSON_ID )
             AND   ( ORG_ORG.ORG_ID = ORG_ACCOUNT.ORG_ID ) 
             AND   ( ORG_PERSON.PERSON_ID = ORG_ACCOUNT.PERSON_ID )
             AND   ( ORG_ALT_ACCOUNT_CUST.PERSON_ID = ORG_ACCOUNT.PERSON_ID )
             AND   ( ORG_DODAAC.DODAAC = ORG_ACCOUNT.DODAAC ) ) 
             AND   ( UPPER(ORG_ACCOUNT.DODAAC) LIKE UPPER(:DODAAC) 
             AND    ORG_DODAAC.DRA IN ( :P_DRA_ENTRIES)
             AND     UPPER(ORG_ACCOUNT.DODAAC_COMMODITY) = UPPER('A') )
           ORDER BY ORG_DODAAC.DRA ASC, ORG_ACCOUNT.ACCOUNT_NUMBER ASC, ORG_PERSON.LAST_NAME ASC

Некоторые примечания по стилю: я удалилдвойные кавычки из имен и псевдонимов вашей таблицы, потому что они раздражают и не нужны.Но я оставил ваш запрос в старом проприетарном синтаксисе соединений Oracle вместо соединений ANSI, поскольку я знаю, что многие рабочие места все еще используют его в качестве внутреннего стандарта кодирования.Я оставил свои изменения в нижнем регистре, чтобы их было легко увидеть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...