【问题标题】:Mysql select only child from a table treeMysql从表树中选择唯一的孩子
【发布时间】:2017-04-01 16:24:56
【问题描述】:

我有一个表名tbl_section这个表是这样的

db_secid   db_secname   db_secdesc    db_parent
1          Electrical                 NULL
2          Mechanical                 NULL
3          Plumbing                   NULL
4          Cables                      1
5          Lamps                       1
6          HDMI                        4

我只想选择具有db_parent=NULL 的行的子级。上表的结果将只有CablesLamps

我试试这个查询

select 
s1.db_secname 
from tbl_section as s1
LEFT JOIN tbl_section as s2
ON 
s1.db_secid=s2.db_parent
WHERE s2.db_parent IS NULL

但是这个查询给了我一个结果,我不想要这个查询的结果

Mechanical,Plumbing,Lamps,HDMI 

我怎样才能解决这个问题并且只拥有父母为db_parent = NULL 的孩子?

【问题讨论】:

  • 为什么要写LEFT JOIN

标签: mysql parent-child


【解决方案1】:

只需执行JOIN,这将过滤掉没有父级的行。此外,您还交换了父子关系:应该是s1.db_parent = s2.db_secid,而不是s1.db_secid=s2.db_parent

SELECT s1.db_secname
FROM tbl_section AS s1
     JOIN tbl_section AS s2 ON s1.db_parent = s2.db_secid
WHERE s2.db_parent IS NULL

【讨论】:

    【解决方案2】:

    你可以使用内连接

    select t1.db_secname
    from tbl_section as t1
    inner join tbl_section as t2 
          on t2.db_parent is null and t2.db_secid = t1.db_parent
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      • 1970-01-01
      相关资源
      最近更新 更多