@everywhereigo

Что нужно исправить, чтобы sql код заработал?

Мне дали задание реализовать SQL запросы:
1. Напишите запрос, который выберет всех сотрудников из таблицы "Employees", у которых зарплата больше 50000.
2. Напишите запрос, который выведет информацию о продуктах из таблицы "Products", у которых количество на складе меньше 10.
3. Создайте запрос, который выберет все заказы из таблицы "Orders", сделанные после определенной даты (например, после 01.01.2022).
4. Напишите запрос, который выберет сотрудников из таблицы "Employees", у которых зарплата больше 50000 и которые сделали заказы на продукты с количеством на складе меньше 10.
5. Напишите запрос, который выведет информацию о продуктах из таблицы "Products", у которых количество на складе меньше 5 и которые были заказаны сотрудниками с зарплатой меньше 40000.
6. Создайте запрос, который выберет все заказы из таблицы "Orders", сделанные после определенной даты (например, после 01.01.2022) и содержащие продукты, заказанные сотрудниками с именем, начинающимся на букву "J".
7. Напишите запрос, который выберет сотрудников из таблицы "Employees", у которых зарплата больше средней зарплаты всех сотрудников и которые сделали заказы после 01.01.2022 на продукты с количеством на складе больше 15.
8. Создайте запрос, который выберет все заказы из таблицы "Orders", сделанные сотрудниками с зарплатой меньше 45000 и содержащие продукты, у которых количество на складе больше 20.
9. Напишите запрос, который выберет сотрудников из таблицы "Employees", у которых зарплата оканчивается на цифру "5" и которые сделали заказы после определенной даты (например, после 01.01.2022) на продукты, у которых количество на складе меньше 10.

Я написал:
SELECT * FROM Employees WHERE salary > 50000;
SELECT * FROM Products WHERE quantity_in_stock < 10;
SELECT * FROM Orders WHERE order_date > '2022-01-01';
SELECT e.* FROM Employees e
JOIN Orders o ON e.employee_id = o.employee_id
JOIN Products p ON o.product_id = p.product_id
WHERE e.salary > 50000 AND p.quantity_in_stock < 10;
SELECT p.* FROM Products p
JOIN Orders o ON p.product_id = o.product_id
JOIN Employees e ON o.employee_id = e.employee_id
WHERE p.quantity_in_stock < 5 AND e.salary < 40000;
SELECT * FROM Orders o
JOIN Employees e ON o.employee_id = e.employee_id
WHERE o.order_date > '2022-01-01' AND e.name LIKE 'J%';
SELECT e.* FROM Employees e
JOIN Orders o ON e.employee_id = o.employee_id
JOIN Products p ON o.product_id = p.product_id
WHERE e.salary > (SELECT AVG(salary) FROM Employees) AND p.quantity_in_stock > 15;
SELECT * FROM Orders o
JOIN Employees e ON o.employee_id = e.employee_id
JOIN Products p ON o.product_id = p.product_id
WHERE e.salary < 45000 AND p.quantity_in_stock > 20;

Мне выдает:
SELECT e.* FROM Employees e
JOIN Orders o ON e.employee_id = o.employee_id
JOIN Products p ON o.product_id = p.product_id
WHERE e.salary > 50000 AND p.quantity_in_stock < 10 LIMIT 0, 25
Ответ MySQL: Документация
#1054 - Неизвестный столбец 'o.product_id' в 'on clause'

Что было сделано до этого:
CREATE TABLE Employees (
employee_id INT PRIMARY KEY,
name VARCHAR(50),
salary DECIMAL(10, 2)
);

CREATE TABLE Products (
product_id INT PRIMARY KEY,
name VARCHAR(50),
quantity_in_stock INT
);

CREATE TABLE Orders (
order_id INT PRIMARY KEY,
employee_id INT,
order_date DATE,
FOREIGN KEY (employee_id) REFERENCES Employees(employee_id)
);
-- Заполнение таблицы "Employees"
INSERT INTO Employees (employee_id, name, salary) VALUES
(1, 'Иван Иванов', 50000),
(2, 'Петр Петров', 60000),
(3, 'Мария Сидорова', 55000),
(4, 'Анна Петрова', 52000),
(5, 'Сергей Сергеев', 58000);

-- Заполнение таблицы "Products"
INSERT INTO Products (product_id, name, quantity_in_stock) VALUES
(1, 'Ноутбук', 10),
(2, 'Смартфон', 20),
(3, 'Планшет', 15),
(4, 'Наушники', 30),
(5, 'Фотоаппарат', 12);

-- Заполнение таблицы "Orders"
INSERT INTO Orders (order_id, employee_id, order_date) VALUES
(1, 1, '2022-10-15'),
(2, 2, '2022-10-16'),
(3, 3, '2022-10-17'),
(4, 4, '2022-10-18'),
(5, 5, '2022-10-19');

Помогите, пожалуйста, решить проблему
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
А что именно вам непонятно?
#1054 - Неизвестный столбец 'o.product_id' в 'on clause'
В таблице Orders у вас нет поля product_id, да и вообще нет никакой связи между Orders и Products.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
У вас нет связи между таблицами Orders и Products.
Либо потеряли свойство, для обеспечения связи "один-ко-многим":
(Если один заказ может содержать в себе строго один продукт)
CREATE TABLE Orders (
...
Product_Id int,
FOREIGN KEY (Product_Id) REFERENCES Products(Product_Id) -- внешний ключ к продуктам
...

Либо потеряли целую таблицу, для обеспечения связи "многим-ко-многим":
(Если один заказ может содержать в себе много продуктов)
-- Таблица "Позиция продукта в заказе"
CREATE TABLE Order_Positions (
position_id INT PRIMARY KEY,
order_id INT,
product_id INT,
FOREIGN KEY (Product_Id) REFERENCES Products(Product_Id), -- внешний ключ к продуктам
FOREIGN KEY (order_id) REFERENCES Orders(order_id) -- внешний ключ к Заказам
);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы