Sql 类别和子类别数据库

Sql 类别和子类别数据库,sql,join,Sql,Join,我在检索列值时遇到了一个问题,就像依赖其他列一样 我试着用外部连接和嵌套选择来实现这一点,但我想我脑子里找不到解决方案 Categories Table: ID Name ParentID -------------------------------- 1 Software NULL 2 Domains NULL 3 Games NULL 4 Accounts

我在检索列值时遇到了一个问题,就像依赖其他列一样 我试着用外部连接和嵌套选择来实现这一点,但我想我脑子里找不到解决方案

Categories Table:
ID  Name                ParentID
--------------------------------
1   Software            NULL
2   Domains             NULL
3   Games               NULL
4   Accounts            NULL
5   Others              NULL
6   Security Software   1
7   Operating Systems   1
8   Browsers            1
9   Developer Tools     1
10  .com Domains        2
11  .net Domains        2
12  .org Domains        2
13  Online Games        3
14  PC Games            3
15  PS Games            3
16  RapidShare Accounts 4
17  4shared Account     4
18  Web Templates       5
19  Flash Intros        5
20  Firewall            6
21  Antivirus           6
我想做什么来显示父类别名称 而不是parentID

那样

ID  Name                ParentID
--------------------------------
1   Software            NULL
2   Domains             NULL
3   Games               NULL
4   Accounts            NULL
5   Others              NULL
6   Security Software   Software
7   Operating Systems   Software
8   Browsers            Software
9   Developer Tools     Software
10  .com Domains        Domains
11  .net Domains        Domains
12  .org Domains        Domains
13  Online Games        Games               
14  PC Games            Games               
15  PS Games            Games               
16  RapidShare Accounts Accounts            
17  4shared Account     Accounts            
18  Web Templates       Others              
19  Flash Intros        Others              
20  Firewall            Security Software
21  Antivirus           Security Software

你需要在桌子上加入两次

SELECT c1.Id, c1.Name as parentname , c2.name
FROM categories c1
JOIN categories c2
    ON c1.id = c2.parentid
结果将是:

ID      ParentName            Name
1       software              security software
1       software              operating software
2       domains               .com domains
2       domains               .net domains
2       domains               .org domains
3       games                 pc games
这将为您提供parentID、parentName以及子类别或子类别的名称

如果需要,还可以将其更改为包含子类别id

根据您的编辑,您可以使用以下内容:

create table categories
(
    id int,
    name varchar(50),
    parentid int
)

insert into categories values(1, 'software', null)
insert into categories values(2, 'domains', null)
insert into categories values(3, 'games', null)
insert into categories values(6, 'security software', 1)
insert into categories values(7, 'operating systems', 1)
insert into categories values(8, 'browsers', 1)
insert into categories values(10, '.com domains', 2)
insert into categories values(11, '.net domains', 2)
insert into categories values(12, '.org domains', 2)
insert into categories values(13, 'online games', 3)
insert into categories values(14, 'pc games', 3)
insert into categories values(15, 'ps games', 3)

select c1.id
    , c1.name
    , (select name from categories where c1.parentid = categories.id) as ParentId
from categories c1
这将导致:


应该是
选择c2.Id.
?OP似乎只是想要myID、myName、parentName,而不是myID、myName,parentID@SamDeHaan现在还不清楚他们想要什么,上面的查询向他们展示了如何获取他们请求的记录的父名称。