#postgresql
#postgresql
Вопрос:
Хорошо. Итак, вопрос, который мне задал учитель, был таким:
- (5 баллов) Создайте SQL-запрос к базе данных dvdrental, который использует естественное соединение двух или более таблиц и дополнительное условие where. (Например, найдите названия фильмов, взятых напрокат конкретным клиентом.) Обратите внимание на подсказки на странице новостей курса, если ваш запрос ничего не возвращает.
Вот макет базы данных, с которой я работаю: http://www.postgresqltutorial.com/wp-content/uploads/2013/05/PostgreSQL-Sample-Database.png
Подсказка для нас заключалась в следующем:
Подсказка PostgreSQL: если естественное соединение не дает никаких результатов в dvdrental DB, это потому, что во многих таблицах есть поле last update: timestamp, и, таким образом, естественное соединение пытается присоединиться к этому полю, а также к предполагаемому полю.
например
select * from film natural join inventory;
из-за этого не работает — выдает пустую таблицу (без результатов).
Вместо этого используйтеselect * from film, inventory where film.film_id = inventory.film_id;
Это то, что я сделал:
select *
from film, customer
where film.film_id = customer.customer_id;
Проблема в том, что я не могу получить конкретного клиента.
Я пытался это сделать customer_id = 2;
, но он возвращает ошибку.
Действительно нужна помощь!
Комментарии:
1. Можете ли вы поделиться своим полным запросом и полученной ошибкой?
2. Это отличный пример того, почему
natural join
следует избегать, как чумы.3. Условие соединения
film.film_id = customer.customer_id
совершенно неверно. Afilm_id
не ссылается на acustomer_id
. Чтобы получить фильмы, которые арендовал клиент, вам необходимо объединить film, inventory, rental и customer, напримерfrom film f join inventory i ON f.film_id = i.film_id join rental r ON i.inventory_id = r.inventory_id join customer c ON c.customer_id = r.customer_id
Ответ №1:
Ну, кажется, что вы хотели бы объединить две таблицы, которые не имеют прямого отношения друг к другу, вот ваша проблема:
where film.film_id = customer.customer_id
Чтобы найти, какие фильмы арендуются каким клиентом, вам нужно будет объединить таблицу customer с rental, затем с inventory и, наконец, с film.
В описании задачи говорится
Создайте SQL-запрос к базе данных dvdrental, который использует естественное соединение двух или более таблиц и дополнительное условие where.Цитата