Как я могу исправить ошибку 'ORA-00904' в Oracle? - PullRequest
0 голосов
/ 26 декабря 2018

Привет! Я пытаюсь создать код на сервере SQL, но сервер сообщает, что произошла ошибка «ORA-00904».Я должен показать имя и город клиентов, которые не живут в Харрисоне и Вудсайде и у которых более 500 аккаунтов, используя SELECT.

Это ТАБЛИЦА СЧЕТА.

ACCOUNT_NUMBER   BRANCH_NAME   BALANCE
         A-101      Downtown       500
         A-102    Perryridge       400
         A-201      Brighton       900
         A-215        Mianus       700
         A-217      Brighton       750
         A-222       Redwood       700
         A-305    Round Hill       350

Это Таблица Депозитора.

CUSTOMER_NAME   ACCOUNT_NUMBER
        Hayes            A-102 
      Johnson            A-101
      Johnson            A-201
        Jones            A-217
      Lindsay            A-222
        Smith            A-215
       Turner            A-305 

Это Таблица Клиента.

CUSTOMER_NAME   CUSTOMER_STREET   CUSTOMER_CITY
        Adams            Spring      Pittsfield
       Brooks           Senator        Brooklyn
        Curry             North             Rye
        Glenn         Sand Hill        Woodside
        Green            Walnut        Stamford
        Hayes              Main        Harrison
      Johnson              Alma       Palo Alto
        Jones              Main        Harrison
      Lindsay              Park      Pittsfield
        Smith             North             Rye
       Turner            Putnam        Stamford
     Williams            Nassau       Princeton

Я уже пробовал код ниже, и я думаю, что есть проблема с псевдонимом, но я точно не знаюЗачем.

SELECT customer_name, 
       customer_city 
FROM   (SELECT * 
        FROM   (SELECT * 
                FROM   depositor X 
                       full OUTER JOIN (SELECT * 
                                        FROM   customer Y 
                                        WHERE  NOT customer_city = 'Harrison' 
                                               AND NOT customer_city = 
                                                       'Woodside') 
                                    ON X.customer_name = y.customer_name) Z 
               full OUTER JOIN (SELECT * 
                                FROM   account W) 
                            ON Z.account_num = w.account_num) 
WHERE  balance >= 500; 

Ответы [ 3 ]

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

Ikk, почему ваш запрос настолько сложен с объединениями.Можно попробовать выполнить следующий запрос

     select c.customer_name,c.customer_city from customer c
      where 
       c.customer_city not in 
      ( 'Woodside','Harrison' )
       and c.customer_name in 
     (Select d.customer_name
       from depositor d where 
     d.account_number in
    (Select a.account_number from account a where
     a.balance >=500)
     )

Вышеприведенный запрос может быть кратким и не содержит объединений

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

Если я правильно понимаю ваш вопрос, вам не нужны все эти подзапросы с full outer joins.Вы можете просто использовать обычные joins и агрегировать на sum:

select c.customer_name, c.customer_city
from customer c
    join depositor d on c.customer_name = d.customer_name
    join account a on d.account_number = a.account_number
where c.customer_city not in ('Harrison','Woodside')
group by c.customer_name, c.customer_city
having sum(a.balance) > 500

Пара замечаний: я бы рекомендовал использовать customer_id в качестве primary key вместо customer_name.Двойные имена, такие как johnson, могут вызвать проблемы и привести к ложным результатам.Кроме того, похоже, что таблица depositor является таблицей 1-n с таблицей customer.Вот почему здесь используется оператор having с sum вместо where критерия.

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

Я уже попробовал приведенный ниже код, и я думаю, что есть проблема с псевдонимом, но я точно не знаю, почему.1006 *

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