首页 > 解决方案 > 从项目表中进行选择的 SQL 查询,该表连接到类别表

问题描述

我有类别表的结构:

项目表的结构:

表结构

表通过一对多关系与 category_id 字段相关联。那些。1 个类别可以有许多项目。

类别表中的两级层次结构。这定义了主要类别和子类别。类别是 parent_id = NULL 的那些记录。和子类别,这些是其中 parent_id = 到某个 id 的那些记录。

一个项目既可以属于主类别(其中 parent_id = null),也可以属于子类别(子类别)。项目可以是活动的和不活动的(0 或 1)。类别和子类别也可以是活动的和不活动的。

请告诉我。我无法查询以选择项目。我需要从 Items 表中选择状态为 is_active = 1 的项目,它们是:1) 加入到主类别,其中 has_active = 1。2) 最困难的是:项目加入到子类别中status is_active = 1,其中有一个status is_active = 1的父类。这实际上是用sql完成的吗?我使用查询

    SELECT * FROM item LEFT JOIN categories 
ON item.category_id = categories.id
    WHERE item.is_active = 1 AND categories.is_active = 1 AND categories.parent_id IN 
    (SELECT id FROM categories WHERE parent_id IS NULL AND is_active = 1)

但它返回一个空的结果给我

标签: mysqlsqljoincategories

解决方案


SELECT item.* FROM 
item INNER JOIN categories ON item.category_id = categories.id
WHERE item.is_active = 1 AND (categories.is_active = 1 AND categories.parent_id IN 
    (SELECT id FROM categories WHERE parent_id IS NULL AND is_active = 1)) OR ( item.is_active = 1 AND categories.parent_id IS NULL AND categories.is_active = 1 )

推荐阅读