Arhn - архитектура программирования

Oracle просматривает неверный идентификатор

я должен реализовать

Создайте представление, показывающее общий доход от проката каждого фильма в базе данных.

Так я и сделал

CREATE OR REPLACE VIEW MovieIncome AS SELECT s.movie_copy_id, SUM(S.PRICE)
AS Income FROM TRANSACTIONS s
left OUTER JOIN MOVIE_COPIES ON MOVIE_COPIES.movie_copy_id = s.movie_copy_id
left OUTER JOIN MOVIES ON MOVIES.ID = MOVIE_COPIES.MOVIE_copy_id
WHERE MOVIES.ID = MOVIE_COPIES.MOVIE_copy_id
GROUP BY MOVIES.NAME;

В таблице транзакций есть: transaction_id, movie_copy_id, customer_id, цена.
Таблица MOVIE_COPIES содержит: тип, store_id, movie_copy_id, movie_number
Таблица MOVIES содержит: идентификатор, имя, минуты.

Но Oracle бросает меня

ORA-00904: "S"."MOVIE_COPY_ID": invalid identifier

У моего друга такая же задача, и его столбцы имеют другое имя, но с той же целью и отлично работают, для меня это не так.


  • Вы уверены, что показываете нам правильное утверждение? В выписке нет Transaction_ID 23.04.2015
  • (исправлено) Да, у меня есть transaction_id в таблице транзакций :/ 23.04.2015
  • Но этого нет в вашем заявлении, поэтому я не думаю, что это утверждение и исключение связаны 23.04.2015
  • вы правы, пробовал разные колонки, исправил 23.04.2015
  • Пожалуйста, отредактируйте свой вопрос и включите определение (имена столбцов и типы данных) для таблиц, задействованных в этом запросе. Спасибо. 23.04.2015
  • Код и сообщение по-прежнему не совпадают; код ссылается на transaction_id, но в ошибке нет буквы «s». 23.04.2015
  • @AlexPoole перед транзакциями_id 23.04.2015
  • Пожалуйста, сделайте desc table_name для таблиц, которые вы используете, это прояснит структуру таблицы. 23.04.2015

Ответы:


1

Проблемы, которые я мог видеть, следующие:

  1. Что вы получили неправильный столбец в группе (это должны быть неагрегированные столбцы, используемые при выборе).
  2. Что вы указываете условие соединения в предложении where, которое не требуется
  3. Что соединение между таблицами movies и movie_copies, вероятно, должно быть на movies.id = movie_copies.movie_number (хотя это всего лишь предположение).

Этот код работает:

CREATE OR REPLACE VIEW MovieIncome AS 
SELECT s.movie_copy_id, MOVIES.NAME, SUM(S.PRICE) AS Income 
FROM TRANSACTIONS s
LEFT OUTER JOIN MOVIE_COPIES ON MOVIE_COPIES.movie_copy_id = s.movie_copy_id
LEFT OUTER JOIN MOVIES ON MOVIES.ID = MOVIE_COPIES.movie_number
GROUP BY s.movie_copy_id, MOVIES.NAME;

Пример скрипта SQL, показывающий его в действии.

Возможно, запрос должен использовать таблицу фильмов в качестве источника и оставить соединение с другими таблицами или, возможно, вместо этого использовать внутренние соединения, поскольку можно с уверенностью предположить, что любая строка в таблице транзакций должна иметь отношение к таблице movie_copies.

Так что, возможно, вы хотите что-то вроде этого:

CREATE OR REPLACE VIEW MovieIncome AS 
SELECT MOVIE_COPIES.movie_copy_id, MOVIES.NAME, COALESCE(SUM(S.PRICE),0) AS Income 
FROM MOVIES
LEFT OUTER JOIN MOVIE_COPIES ON MOVIES.ID = MOVIE_COPIES.movie_number
LEFT OUTER JOIN TRANSACTIONS s ON MOVIE_COPIES.movie_copy_id = s.movie_copy_id
GROUP BY MOVIE_COPIES.movie_copy_id, MOVIES.NAME;

Это вернет 0 для фильмов, копии которых вообще не были сданы в аренду.

23.04.2015
  • Мне не нужно возвращать 0, мне нужно вернуть полную стоимость каждого фильма, я проверяю, чтобы имя было таким же, как копия, с копией транзакции. 23.04.2015
  • Первый код, который вы написали, у меня все равно не работает, все еще возникает та же проблема. 23.04.2015
  • @RenatasValatka Если вы посмотрите на SQL Fiddle, на который я ссылался, есть ли что-то другое в вашем коде, кроме типов данных? Если имена столбцов такие же, как вы описали, и текст запроса такой же, он должен работать, как показывает скрипка. 23.04.2015
  • @RenatasValatka Итак, код идентичен, но вы все равно получаете ошибку? Это звучит действительно странно. 23.04.2015
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..