我的查询有点复杂。
我有桌子
tbl_Categories {CategoryID, Name, CategoryId_fk}
它是一个自引用表。
当CategoryId_fk
为NULL
时,如果该值为子级,则该行为父级。
我有问题选择所有孩子(CategoryId_fk
不是null
)和CategoryId_fk
是null
并且没有孩子的行。
我尝试了一些但不起作用:
SELECT a.*
FROM tbl_Categories a
WHERE NOT EXISTS (
SELECT 1 FROM tbl_Categories b
WHERE b.CategoryId_fk= a.CategoryId_fk
)
答案 0 :(得分:2)
您已在外键上匹配b
和a
。
我可能会误解你的问题,大多数时候用户想要找到给定父级的所有孩子,但是在查询之下会返回我认为你需要的东西。
/* 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