mysql - 用于从连接到类别表的项目表中进行选择的 SQL 查询

标签 mysql sql join categories

我有类别表的结构:

  • ID
  • 标题
  • is_active(0 或 1)
  • parent_id

项目表的结构:

  • ID
  • 标题
  • is_active(0 或 1)
  • category_id

table structure

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

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

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

请告诉我。我无法查询来选择项目。 我需要从 Items 表中选择状态为 is_active = 1 的项目,它们是: 1) 加入主类别,其中 has_active = 1。 2)最困难的是:这些项目被加入到状态为 is_active = 1 的子类别,该子类别有一个状态为 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)

但它返回一个空结果给我

最佳答案

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 )

关于mysql - 用于从连接到类别表的项目表中进行选择的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50891290/

相关文章:

php - MySQL - 从3个表中获取数据

mysql - Wordpress/MySql 查询未从 JOIN 的 LEFT 部分生成所有结果

mysql - 连接表并进行计数操作 - MySQL

mysql - 使用 cfchart 标签在单个饼图中显示来自多个查询的数据

java - 使用java生成UUID主键安全吗?

mysql - 我如何将 Csv 文件加载到 Mysql 数据库中

sql - SQL 中 IN 和 NOT IN 的不同结果

java - 为什么 IntelliJ 在使用本地数据源时找不到数据库用户凭据?

MySQL - 从日志表中选择总事件时间

c# - 使用 Active Directory 密码从 C# 连接到 Sql Azure Db 时遇到问题