Это действительно о языке SQL и об обучении его использованию. Надеюсь, у вас есть GUI для вашей базы данных, такой как PhpMyAdmin или Heidi SQL, потому что часто проще использовать его при написании кода SQL.
Предполагая, что у вас есть следующие таблицы:
CREATE TABLE products
(
product_id int PRIMARY KEY,
product_name varChar(255)
);
CREATE TABLE categories
(
category_id int PRIMARY KEY,
category_name varChar(255)
);
CREATE TABLE product_to_categories
(
product_id int,
category_id int,
FOREIGN KEY (product_id) REFERENCES products(product_id),
FOREIGN KEY (category_id) REFERENCES categories(category_id)
);
С этими образцами данных:
INSERT INTO products VALUES (1, 'Product 1'), (2, 'Product 2');
INSERT INTO categories VALUES (1, 'Category 1'), (2, 'Category 2');
INSERT INTO product_to_categories VALUES (1,1), (2,1), (2,2);
Вы можете использовать этот длинный запрос, чтобы получить данные:
SELECT
P.*,
C.category_name
FROM
products P
JOIN
product_to_categories PC
ON
P.product_id = PC.product_id
JOIN
categories C
ON
PC.category_id = C.category_id
Что возвращает
1 Product 1 Category 1
2 Product 2 Category 1
2 Product 2 Category 2
Однако, поскольку вы используете одни и те же имена столбцов в объединяемой таблице, вы также можете использовать команду NATURAL JOIN
для получения того же
SELECT
P.*,
C.category_name
FROM
products P
NATURAL JOIN
categories C
NATURAL JOIN
product_to_categories
Чтобы получить продукт из одной категории, вы можете используйте:
SELECT
*
FROM
products P
NATURAL JOIN
product_to_categories PC
WHERE
PC.category_id = 2
, который возвращает
2 Product 2 2