Разработка запроса на выбор счетчика из разных таблиц - PullRequest
0 голосов
/ 02 декабря 2018

Это схема для моих вопросов

Привет, у меня нет опыта в SQL Developer, и я пытаюсь построить запрос для следующего вопроса:

Мне нужно, чтобы для каждого DVD в каталоге отображались заголовок, длина, дата выпуска и сколько раз он был проверен всеми покупателями во всех библиотеках.Также я хочу включить те, которые еще не были извлечены, и отображать 0, и отсортировать результаты по названию.

Пока у меня есть это в запросе, но я здесь:

--Question C. ************* VERIFY
Select
    Catalog_Item.Title,
    DVD.Length,
    Catalog_Item.Release_Date,
    (
        Select 
            Count(Transaction.Transaction_ID) 
        From Transaction 
        Where
            DVD.Catalog_Item_ID = Physical_Item.Catalog_Item_ID
            And Physical_Item.Physical_Item_ID = Transaction.Physical_Item_ID
    ) as "Total_DVD"
From 
    Catalog_Item,DVD,
    Physical_Item
Group by
    Catalog_Item.Title,
    DVD.Length,
    Catalog_Item.Release_Date

Если я выполняю этот точный запрос, я получаю ошибку

Not a Group By Expression 

И если я исключаю GROUP BY, я получаю результаты, которые не похожи на правильные результаты.

Какие-либо предложения о том, какой синтаксис я могу использовать для достижения желаемого результата?Спасибо!

Ответы [ 2 ]

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

Вы добавили в запрос три таблицы, но не смогли их связать.Если вы не свяжете их, вы увидите слишком много дублированных строк.Кроме того, ссылки на подзапрос были неверными. Я предполагаю, что вы пытались разместить ссылки, которые вы пропустили, в основном запросе.

Полагаю, вам нужно что-то подобное:

Select
     CI.Title
    ,DVD.Length
    ,CI.Release_Date
    ,NVL(TR.TotalTransactions,0) TotalTransactions
From  Catalog_Item CI
INNER JOIN DVD ON DVD.Catalog_Item_ID  = CI.Catalog_Item_ID 
LEFT JOIN Physical_Item PHI  ON CI.Catalog_Item_ID = PHI.Catalog_Item_ID
LEFT JOIN (SELECT Physical_Item_ID
                , Count(Transaction_ID) TotalTransactions
            FROM Transaction 
            GROUP BY Physical_Item_ID
            ) TR ON PHI.Physical_Item_ID = TR.Physical_Item_ID
0 голосов
/ 02 декабря 2018

Для начала соедините Catalog_Item, Physical_Item и DVD вместе.Без соответствующих условий объединения эти три таблицы будут объединены с использованием объединения декартовых продуктов - что, вероятно, является одной из причин, по которым вы видите неожиданные результаты.

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