#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. Используйте форматирование кода, а не форматирование кавычек.