【问题标题】:complex mysql query join with in tables复杂的mysql查询加入表
【发布时间】:2014-02-10 16:02:19
【问题描述】:

我有一个处理复杂 JOIN 查询的任务。

表 1:object_category(具有父类别到子类别层次结构的树状结构)

---------------------- category_id parent_id ---------------------- 1个空 2 空 3 1 4 1 5 2 6 2 ----------------------

注意类别 3 是 1 的子项,5 是 2 的子项,依此类推......

表 2:object_category_map(将 object_id 与 object_category 表的 category_id 映射的表)

---------------------- object_id category_id ---------------------- 23 1 23 4 23 6 24 2 24 5 ----------------------

任务是找到没有为category_id映射parent_id的object_id。

示例 1: object_id: 24, category_id : 2, 5 在表 2 中,object_id 24 关联了 category_id 5,并且 parent_id 为 5 它是 2,

示例 2: object_id:23,category_id:1、4、6 object_id 23 错过了 category_id 6 的 parent_id(2)。

任务是从table2中找到23,即object_id(s)列表,类似于23。

请帮助解决这个问题。谢谢。

【问题讨论】:

  • 首先,您要实现的是节点层次概念,在这里您可以使用固定级别的 JOIN,例如父级的级别最高为 2,因此您最多可以进行 3 次连接,但是什么如果父母的等级不断增加?因此,为此,您必须遍历节点层次结构,直到将 parent_id 设置为 NULL。为此,您需要编程工作 + SQL 查询工作并使用递归函数,直到您收到 parent_id 为 NULL。你用的是什么语言,所以我可以指出正确的例子
  • 我正在使用 PHP 和 Mysql

标签: mysql join


【解决方案1】:

你能试试这样的吗?

select object_parent_needed.object_id
from (
    select object_id,object_category_map.category_id,parent_id
    from object_category_map 
    join object_category on object_category_map.categor_id = object_category.category_id
    where parent_id is not null
) object_parent_needed
left outer join object_category_map on object_category_map.object_id = object_parent_needed.object_id  
                                    and object_category_map.category_id = object_parent_needed.parent_id
where object_category_map.category_id is null

【讨论】:

    猜你喜欢
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多