Как отобразить несколько столбцов из 3 разных таблиц в SQL? - PullRequest
0 голосов
/ 17 марта 2020

У меня есть 3 таблицы:

Reservation, Trip, Customer

Мне нужно только отобразить название поездки, тип поездки, клиент имя, фамилия клиента, клиенты, у которых есть несколько бронирований

Вроде как

Таблица резервирования

Reservation_ID ... ... .. Customer_Num

  1. 16001 101
  2. 16002 101
  3. 16003 102
  4. 16004 103
  5. 16005 103

Таблица клиентов

Customer_ID ... ... .. Customer_Num

  1. 30 101
  2. 31 102
  3. 32 103

Основной идентификатор таблицы клиента - customer_ID и имеет имя столбца Customer_Num. имя этого столбца также содержится в таблице reservation.

Основной идентификатор таблицы резервирования: Reservation_ID

Я пробовал:

SELECT Customer.First_Name, Customer.Last_Name, Trip.Trip_Name, Trip.Type, Reservation.Customer_Num COUNT(Reservation.Customer_Num
FROM Reservation, Customer, Trip
WHERE Reservation.Customer_Num = Customer.Customer_Num
HAVING COUNT(Reservation.Customer_Num) > 1
GROUP BY Customer.First_Name, Customer.Last_Name, Trip.Trip_Name, Trip.Type, Reservation.Customer_Num;

enter image description here

enter image description here

enter image description here

Ответы [ 4 ]

0 голосов
/ 17 марта 2020

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

ВЫБЕРИТЕ CUSTOMER.FIRST_NAME, CUSTOMER.LAST_NAME, TRIP.TRIP_NAME, TRIP.TYPE , RESERVATION.CUSTOMER_NUM, COUNT (RESERVATION.CUSTOMER_NUM) CUSTOMER_NUM_CNT

ОТ БРОНИРОВАНИЯ

ВНУТРЕННЕЕ РЕГИСТРАЦИЯ НА КЛИЕНТЕ. *

GROUP BY CUSTOMER.FIRST_NAME, CUSTOMER.LAST_NAME, TRIP.TRIP_NAME, TRIP.TYPE, RESERVATION.CUSTOMER_NUM прокомментировал - HAVING COUNT (RESERVATION.CUSTOMER_NUM)> 1;

* 1011 1012 *

0 голосов
/ 17 марта 2020

Попробуйте, предполагая, что таблица Trip использует поле Customer_num в качестве внешнего ключа

select A.Customer_id, A.Name, A.Last_name, B.name, B.type from Customer as A
where Customer_id in 
    (select Customer_Num from Reservation group by Customer_Num having count(Customer_Num) > 1)
left join Trip as B on Trip.Customer_Num = Customer.Customer_Num
0 голосов
/ 17 марта 2020

Вы можете использовать EXISTS:

SELECT t.*, c.*
FROM reservation r INNER JOIN
     customer c
     ON c.Customer_Num = r.Customer_Num INNER JOIN
     trip t
     ON . . .
WHERE EXISTS (SELECT 1 
              FROM reservation r1 
              WHERE r1.customer_no = r.customer_no AND 
                    r1.Reservation_ID <> r.Reservation_ID 
             );

Вам необходимо настроить условие ON для таблицы Trip, так как вы не указали информацию таблицы.

0 голосов
/ 17 марта 2020

Предполагая, что в вашей таблице TRIP у вас есть столбцы, такие как название поездки, тип поездки, вы можете попробовать выполнить запрос ниже -

SELECT Customer.First_Name
      ,Customer.Last_Name
      ,Trip.Trip_Name
      ,Trip.Type
      ,Reservation.Customer_Num
      ,COUNT(Reservation.Customer_Num) Customer_Num_Cnt
FROM Reservation R
INNER JOIN Customer C ON Reservation.Customer_Num = Customer.Customer_Num
INNER JOIN Trip T ON R.TRIP_ID = T.TRIP_ID
GROUP BY Customer.First_Name
        ,Customer.Last_Name
        ,Trip.Trip_Name
        ,Trip.Type
        ,Reservation.Customer_Num
-- HAVING COUNT(Reservation.Customer_Num) > 1;

Если это не соответствует вашим требованиям, пожалуйста, поделитесь полной структурой таблицы TRIP и таблица CUSTOMER.

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