【问题标题】:How to select parent rows that doesn't have child and child that has parent rows如何选择没有子行的父行和有父行的子行
【发布时间】:2012-02-29 23:31:06
【问题描述】:

我有一个有点复杂的查询。
我有桌子

tbl_Categories {CategoryID, Name, CategoryId_fk}

它是一个自引用表。 当CategoryId_fkNULL 时,当有一个值为child 时,该行为parent。 我无法选择所有孩子(这是CategoryId_fk 不是null)和CategoryId_fknull 并且没有孩子的行。 我尝试了一些东西但没有用:

SELECT a.*
FROM tbl_Categories a
WHERE NOT EXISTS (
    SELECT 1 FROM tbl_Categories b
    WHERE b.CategoryId_fk= a.CategoryId_fk
)

【问题讨论】:

  • 在 StackOverflow 中搜索“Recursive CTE”,了解如何解决此类问题的数十个示例。 edit 在“层次结构”中折腾以获得更具体的示例。
  • 嗯.. 我想我没有做对。如果你想要所有的孩子和所有的父母,那不是整张桌子吗?能否提供样本数据?
  • @BhrugeshPatel - 整张桌子没有父母个孩子。

标签: sql sql-server sql-server-2008 tsql


【解决方案1】:

您已在外键上同时匹配了 ba

我可能误解了你的问题,大多数时候用户希望找到给定父母的所有孩子,但下面的查询返回我认为你需要的。

/* All parents without children */
SELECT  a.*
FROM    tbl_Categories a
WHERE   NOT EXISTS (
          SELECT * 
          FROM   tbl_Categories b
          WHERE  b.CategoryId_fk = a.CategoryId
)
/* All children */
UNION ALL
SELECT  a.*
FROM    tbl_Categories a
WHERE   CategoryId_fk IS NOT NULL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多