SQL-запрос для объединения 5 таблиц

У меня пять таблиц:

Cutomer(CustomerID, name, surname)

PaymentMethod(cardNo,securityCode,expirationDate)

Ticket(ticketID, parkingnumber)

Has(CustomerID, CardNo)

Reserve(TicketID,cardNo)

Как я могу написать SQL-запрос в pgadmin-4 для перечисления клиентов, которые зарезервировали ровно два билета?

Спасибо за любую помощь!


person Yasemin Eldayih    schedule 05.07.2021    source источник
comment
Есть ли у вас какие-либо образцы данных, с помощью которых вы могли бы затем показать, какие результаты вы ожидаете получить от этого образца? А что пробовали? Если вы можете показать какой-то SQL, который вы пробовали, мы сможем объяснить, почему он не работает, что нужно изменить и т. Д. Однако, как правило, не одобряются вопросы, которые просто просят нас выполнить домашнее задание для вас.   -  person MatBailie    schedule 05.07.2021


Ответы (2)


Это базовые INNER JOINs с функцией группировки (GROUP BY) для подсчета билетов на одного клиента.

Затем вы можете использовать функцию COUNT в предложении HAVING, чтобы применить определенное условие.

Что-то вроде :

SELECT
    c.CustomerID,
    COUNT(t.TicketID)
FROM
    Cutomer c
    INNER JOIN Has h ON h.CustomerID = c.CustomerID
    INNER JOIN Reserve r ON r.cardNo = h.CardNo
    INNER JOIN Ticket t on t.TicketID = r.TicketID
GROUP BY
    c.CustomerID
HAVING
    COUNT(t.TicketID) = 2
person Yann39    schedule 05.07.2021

Вы можете использовать joins и group by, но вам не нужны все таблицы. Если я понимаю модель данных, вам нужны только reserve и has:

select h.customerid, count(*)
from reserve r join
     has h
     on r.cardno = h.cardno
group by h.customerid
having count(*) = 2;
person Gordon Linoff    schedule 05.07.2021