代码之家  ›  专栏  ›  技术社区  ›  Niels Van Steen

SQL表本身连接,但允许“0”值

  •  1
  • Niels Van Steen  · 技术社区  · 5 年前

    好的,我有一个简单的表“category”在这个表上,categories和subcategories被保存。类别具有“parent_id=0”,子类别具有等于类别的行id的“parent_id”。

    ID  name       parent_id
    1   fruit      0
    2   apple      1
    3   pear       1
    4   vegetable  0
    5   tomato     4
    
    Fruit
    -apple
    -pear
    vegetable
    -tomato
    

    在这个例子中,“水果”和“蔬菜”是其他子类别,我知道在这个顶部已经有很多问题得到了回答。但我的问题是:

    如何加入“ID”和“parent_ID”。当前我正在使用“xampp”,当我加入xampp不允许的值时:

    parent_id = 0;
    

    因为它与“ID”的主键和外键相链接。

    1 回复  |  直到 5 年前
        1
  •  1
  •   Tim Biegeleisen    5 年前

    使用适当的 ORDER BY 条款:

    SELECT
        CASE WHEN c1.parent_id = 0 THEN c1.name ELSE ' - ' || c1.name END AS name
    FROM category c1
    LEFT JOIN category c2
        ON c1.parent_id = c2.ID
    ORDER BY
        COALESCE(c2.ID, c1.ID),
        c1.ID;
    

    注意:上面的查询可能需要根据实际的SQL数据库进行一些调整。

        2
  •  1
  •   forpas    5 年前

    不需要加入。
    使用条件排序:

    select 
      concat(case when parent_id <> 0 then '-' else '' end, name) name
    from category
    order by 
      case when parent_id = 0 then id else parent_id end, 
      parent_id
    

    demo
    结果:

    | name      |
    | --------- |
    | fruit     |
    | -apple    |
    | -pear     |
    | vegetable |
    | -tomato   |