2 回答

TA貢獻1844條經驗 獲得超8個贊
這實際上是關于 SQL 語言和學習如何使用它的。希望您的數據庫有一個 GUI,例如 PhpMyAdmin 或 HeidiSQL,因為在編寫 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

TA貢獻1811條經驗 獲得超6個贊
對于第一個問題:您應該使用JOIN 子句才能通過產品 ID 將產品與類別相關聯:
SELECT
? ? p.product_name,
? ? c.category_name,
FROM
? ? products p
JOIN
? ? products_categories pc ON p.product_id = pc.product_id
JOIN
? ? categories c ON pc.category_id = c.category_id
對于第二個問題:當你關聯兩個表時,你可以通過在連接中添加一個 where 子句來過濾你正在連接的表的結果:
SELECT
? ? p.product_name
FROM
? ? products p
JOIN
? ? products_categories pc ON p.product_id = pc.product_id AND pc.category_id = 1
- 2 回答
- 0 關注
- 197 瀏覽
添加回答
舉報