我有一个tbCategories表:
CREATE TABLE tbCategories(
id INT AUTO_INCREMENT,
name VARCHAR(50),
parentId INT DEFAULT NULL
);
INSERT INTO tbCategories(NAME, parentId) VALUES
('Cell Phones & Accessories', NULL),
('Computers & Accessories', NULL),
('Flip Cases', 1),
('Basic Cases', 1),
('Cell Phones', 1),
('Tablets', 2),
('Laptops', 2),
('Desktops', 2);
和一个tbProducts表:
CREATE TABLE tbProducts(
id INT AUTO_INCREMENT,
name VARCHAR(100),
category INT,
price FLOAT
);
INSERT INTO tbProducts(NAME, category, price) VALUES
('Apple iPhone 8 64GB Space Gray', 5, 449.00),
('Samsung Galaxy S10', 5, 464.99),
('Huawei P30 Pro', 5, 719.99),
('Samsung Note 10+', 5, 902.49),
('Samsung A10', 5, 149.90),
('Lenovo Chromebook', 7, 219.55),
('ASUS ROG', 7, 930.00);
我想通过搜索查询中的父类别访问子类别中的产品。 我试过了,但是我发现这是错误的查询。
SELECT id, name, price FROM tbProducts WHERE (category=? OR category = (SELECT id FROM tbCategories WHERE tbCategories.parentId=?)) AND name LIKE ? OR productCode LIKE ? OR productionCode LIKE ?
因为有多个数据来自子查询。我想我需要使用 JOIN ,但是我不能。你能帮忙吗? 我期望的结果:我将在父类别中搜索,例如,当我在“手机和配件”类别中搜索“三星”时,它将在所有子类别中搜索“翻盖手机壳,基本手机壳,手机” “手机和配件”类别的搜索结果,并给我结果。 我用书面解释了。我不知道还能告诉你什么。
答案 0 :(得分:0)
您需要使用JOIN
SELECT PRO.id
, PRO.name
, PRO.price
FROM tbProducts PRO
JOIN tbCategories CAT
ON PRO.category = CAT.id
JOIN tbCategories CAT2
ON CAT2.id = CAT.parentId
where PRO.name = 'Samsung Galaxy S10'