Как я могу присоединить последнюю таблицу к этому тройному соединению?

#mysql #sql

#mysql #sql

Вопрос:

У меня есть база данных, которую я смоделировал на основе филиала супермаркета. По сути, я хочу сделать объединение для вывода имени клиента, его идентификатора корзины, кассира (типа сотрудников) Идентификатор и последующее имя сотрудника, который затем обслуживает. Мне удалось выполнить тройное объединение таблиц и показать BasketId, EmployeeID и имя сотрудника, но я также хочу получить имя клиента в начале, но понятия не имею, как это сделать.

Я вставил соответствующие фрагменты SQL.

 create table Employee
(
name char(30),
employeeID integer(20) primary key,
);



create table Cashier
(
tillID integer(4) primary key,
employeeID integer(20),
foreign key (employeeID) references adbc921_Employee (employeeID)
);

create table Customer
(
customerID integer(20) primary key,
first_name char(20),
last_name char(20),
);

create table CustomerInStorePurchase
(
customerID integer(20),
number_of_items integer(3),
tillID integer(4),
basketID integer(10),
foreign key (tillID) references adbc921_Cashier (tillID),
foreign key(customerID) references adbc921_Customer (customerID),
foreign key (basketID) references adbc921_Basket (basketID)
);

create table Basket
(
basketID integer(10),
customerID integer(20),
foreign key (customerID) references adbc921_CustomerInStorePurchase (customerID),
foreign key (productID) references adbc921_Product (productID)
);
 

Комментарии:

1. Похоже, вы пропустили конец определения adbc921_Cashier таблицы.

2. В чем проблема? Просто добавьте еще одно соединение с adbc921_Customer .

3. К вашему сведению, вам не нужны круглые скобки вокруг объединений.

Ответ №1:

Просто добавьте еще одно соединение с таблицей customer.

 Select p.basketID, c.employeeId, e.name, cus.customerID, cus.first_name, cus.last_name
FROM adbc921_CustomerInStorePurchase AS p
Inner Join adbc921_Cashier AS c on p.tillID = c.tillID
Inner Join adbc921_Employee AS e on c.employeeID = e.employeeID
inner join adbc921_Customer AS cus on cus.customerID = p.customerID
 

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

Комментарии:

1. У вас опечатка: 91 должно быть 921

2. Использование псевдонимов позволяет избежать подобных проблем.

3. Как вы думаете, почему вам нужно заключать все объединения в круглые скобки подобным образом?

4. В W3Schools они используют круглые скобки для своих объединений.

5. Многие из нас считают w3schools худшим из обучающих сайтов. К сожалению, они также очень популярны и в конечном итоге находятся на вершине поисковых запросов Google.

Ответ №2:

Выберите adbc921_CustomerInStorePurchase.BasketId,adbc921_Cashier.EmployeeID,adbc921_Employee.name , объединить(adbc921_Customer.first_name,’ ‘,adbc921_Customer.last_name) ИЗ ((adbc921_CustomerInStorePurchase Внутреннее соединение adbc921_Cashier с adbc921_CustomerInStorePurchase.tillID = adbc921_Cashier.tillID) Внутреннее соединение adbc921_Employee с adbc921_Cashier.EmployeeID = adbc921_Employee. EmployeeID) Внутреннее соединение adbc921_Customer с adbc921_Customer.CustomerID=adbc921_CustomerInStorePurchase.CustomerID

Если я не ошибаюсь, у вас есть ссылка между таблицей customer и customerinStore, так почему вы ее не используете?

Комментарии:

1. Используйте форматирование кода, а не форматирование кавычек.