【问题标题】:SQL query for selection from the items table, which is joined to the category table从项目表中进行选择的 SQL 查询,该表连接到类别表
【发布时间】:2018-11-26 05:26:27
【问题描述】:

我有类别表的结构:

  • 身份证
  • 标题
  • is_active(0 或 1)
  • parent_id

Item 表的结构:

  • 身份证
  • 标题
  • is_active(0 或 1)
  • category_id

表格通过一对多的关系与 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)

但它返回一个空结果给我

【问题讨论】:

  • 你试过什么? SO 不是代码编写服务。当您遇到特定问题时,我们很乐意为您提供帮助,但您至少必须展示您的尝试。
  • 编辑问题并添加
  • 嗨。这是一个常见问题解答。请始终在谷歌上搜索您的问题/问题/目标的许多清晰、简洁和特定的版本/措辞,带和不带您的特定字符串/名称,并阅读许多答案。将您发现的相关关键字添加到搜索中。如果您没有找到答案,请发布,使用一个变体搜索您的标题和关键字作为您的标签。
  • 您的查询看起来不错,因此您需要检查您对数据的假设。首先,是否在您查询的数据库中有parent_id 为空且is_active = 1 的类别?如果有,是否有任何类别是这些类别的子类别?

标签: mysql sql join categories


【解决方案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 )

【讨论】:

  • 虽然此代码 sn-p 可能是解决方案,但 including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
猜你喜欢
  • 1970-01-01
  • 2018-11-22
  • 2013-08-01
  • 2020-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-15
  • 2023-03-20
相关资源
最近更新 更多