0

我正在尝试查找父类别。

因此我需要写,

其中,CategoryIDaParentCategoryID为 0

CategoryID可能是 30 但如果它有一个ParentCategoryID0 那么你知道它的父类别。

到目前为止,这是我的 SQL:

SELECT        CategoryID, ParentCategoryID, Name, Published, Deleted, PictureID
FROM          Nop_Category
WHERE         (Deleted = 0) 
AND           (Published = 1) 
AND           (CategoryID = ParentCategoryID = 0)
4

2 回答 2

1

要对两个字段执行相等检查,请使用 AND 运算符并指定字段名两次。

SELECT        CategoryID, ParentCategoryID, Name, Published, Deleted, PictureID 
FROM          Nop_Category 
WHERE         (Deleted = 0)  
AND           (Published = 1)  
AND           (CategoryID = ParentCategoryID AND ParentCategoryID = 0) 

但是你也可以这样写并获得相同的结果:

SELECT        CategoryID, ParentCategoryID, Name, Published, Deleted, PictureID 
FROM          Nop_Category 
WHERE         (Deleted = 0)  
AND           (Published = 1)  
AND           (CategoryID = 0 AND ParentCategoryID = 0) 

但是,在您的问题中,您提到 CategoryID 可能是 30,因此您的查询将不起作用。您可能希望省略 CategoryID 或通过参数指定特定的 categoryId:

SELECT        CategoryID, ParentCategoryID, Name, Published, Deleted, PictureID, 
FROM          Nop_Category 
WHERE         (Deleted = 0)  
AND           (Published = 1)  
AND           (CategoryID = @categoryID AND ParentCategoryID = 0) 

编辑:

因此,如果 categoryID 与 CetegoryParentID 相同,我就知道它是一个孩子。

通常,当我做自相关表时,我使用 NULL 作为 ParentId,它告诉我当前行是父行。如果您使用 0 表示 null,则 CategoryId 为 30 且 ParentCategoryId 为 30 的记录意味着它既是子代也不是父代。

ID  PID  Value
0   0    Top Level - must exist for referential integrity
1   0    Child of "Top Level"
2   0    Another child of "Top Level"
3   1    Child of "Child of Top Level"

在这个场景中,您只能有 1 个顶级类别,所有其他类别都是子类别(即使您认为 ParentCategoryId 为 0 的父类别,它仍然必须位于 CategoryId 0 下)

使用 NULL

ID  PID  Value
1   Null Top Level cat 1
2   Null Top Level cat 2
3   1    Child of "Top Level cat 1"
4   2    Child of "Top Level cat 2"

在这个场景中,我可以轻松找到所有顶级类别

SELECT * FROM dbo.Category WHERE pid IS NULL

或者,如果我想要特定类别的顶级类别

SELECT * FROM dbo.Category WHERE CategoryId = 1 AND ParentCategoryId is null

而且我的参照完整性是完全正确的。

要查找父级的直系子级,只需传入您要查找的父级的 categoryid:

SELECT * FROM dbo.Category WHERE ParentCategoryId = 1
于 2012-07-08T15:50:28.023 回答
0
SELECT        CategoryID, ParentCategoryID, Name, Published, Deleted, PictureID
FROM          Nop_Category
WHERE         Deleted = 0
AND           Published = 1
AND           ParentCategoryID = 0
于 2012-07-08T15:51:39.070 回答