Oracle SQL: проблема при написании оператора объединения - PullRequest
0 голосов
/ 05 ноября 2018

Я изучал sql последние 7 недель и у меня проблемы с профсоюзами. У меня есть сценарий, в котором я должен перечислить книги, которые купил клиент, но я не могу дублировать названия книг в результатах запроса. Другими словами, мне нужно удалить дубликаты, используя объединение. Кроме того, я не могу получить книги на основе информации о клиенте, так как мне нужно использовать их имя, как оно есть в таблице клиентов. Я смог написать объединение, которое получает все данные, которые я ищу, но я не знаю, как превратить то, что у меня есть, в объединение.

Вот мой SQL:

select b.title, c.lastname, c.firstname
from customers c join orders o using (customer#)
    join orderitems oi using (order#)
    join books b using (isbn)
where c.lastname = 'LUCAS' and firstname = 'JAKE';

Вот ERD:

введите описание изображения здесь

Я ценю любую помощь, которую кто-то может оказать.

1 Ответ

0 голосов
/ 05 ноября 2018

Вам не нужно использовать union для удаления дубликатов.

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

SELECT DISTINCT b.title
FROM customers c 
JOIN orders o USING (customer#) 
JOIN orderitems oi USING (order#) 
JOIN books b USING (isbn) 
where c.lastname = 'LUCAS' AND firstname = 'JAKE'

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

SELECT titles.title, c.lastname, c.firstname 
FROM
(
    SELECT DISTINCT b.title
    FROM customers c 
    JOIN orders o USING (customer#) 
    JOIN orderitems oi USING (order#) 
    JOIN books b USING (isbn) 
    where c.lastname = 'LUCAS' AND firstname = 'JAKE'
) titles
LEFT JOIN customers c USING (customer#)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...