您需要查询两个表中特定类别的产品,即使产品没有直接关联到该类别。这通常意味着产品可能通过某种层次结构或中间表间接关联到目标类别。
假设我们有以下典型数据库结构:
- products
表:存储产品信息
- categories
表:存储类别信息
- product_category
表:产品和类别的关联表(多对多关系)
如果您的类别有层级结构(父类别-子类别),可以使用递归查询:
WITH RECURSIVE category_tree AS (
-- 基础查询:选择目标类别
SELECT id, name, parent_id
FROM categories
WHERE id = [目标类别ID] -- 或 WHERE name = '特定类别名称'
UNION ALL
-- 递归查询:查找所有子类别
SELECT c.id, c.name, c.parent_id
FROM categories c
JOIN category_tree ct ON c.parent_id = ct.id
)
-- 查询关联到这些类别的产品
SELECT DISTINCT p.*
FROM products p
JOIN product_category pc ON p.id = pc.product_id
JOIN category_tree ct ON pc.category_id = ct.id;
如果产品通过标签或其他属性间接关联到类别:
SELECT DISTINCT p.*
FROM products p
JOIN product_tags pt ON p.id = pt.product_id
JOIN tags t ON pt.tag_id = t.id
JOIN tag_category_mapping tcm ON t.id = tcm.tag_id
WHERE tcm.category_id = [目标类别ID];
如果类别是通过产品属性值定义的:
SELECT p.*
FROM products p
JOIN product_attributes pa ON p.id = pa.product_id
JOIN attributes a ON pa.attribute_id = a.id
WHERE a.name = 'category' AND pa.value = '特定类别值';
您能提供更具体的表结构和关联关系吗?这样我可以给出更精确的查询方案。