我正在使用SQL Server 2k8,并且有一个表需要能够提取动态内容。 所以,我想有两个列,就像父母和孩子一样。
ContentId - SubContentId - ContentInfo
100 100 data here
101 100 data here
102 100 data here
103 100 data here
因此,尽管ContentId正在递增,但SubContentId与Parent ContentId为100相关。因此,如果我选择ContentId 100,我也会检查SubContentId以获取此数字,以便拉回ContentId的所有详细信息这种方法是否合理?我的标志是什么?
答案 0 :(得分:1)
创建,设置,测试:
CREATE TABLE #tmp (
ContentID int, SubContentID int, ContentInfo varchar(255)
)
INSERT INTO #tmp VALUES (100, 100, 'info 1')
INSERT INTO #tmp VALUES (101, 100, 'info 2')
INSERT INTO #tmp VALUES (102, 100, 'info 3')
INSERT INTO #tmp VALUES (103, 100, 'info 4')
INSERT INTO #tmp VALUES (104, 100, 'info 5')
SELECT ContentInfo,
(SELECT ContentInfo + ',' as "data()"
FROM #tmp x
WHERE x.SubContentID = z.ContentID FOR XML PATH('')
) As [SubContent]
FROM #tmp z
WHERE ContentID = 100
答案 1 :(得分:1)
您有一个自引用表。这并非全是坏事。您所要做的就是创建一个这样的查询。
SELECT * FROM content where subcontentID = contentID AND contentID = @contentID
结果将是具有指定contentID
的所有内容记录如果您还需要查看所有数据,那么有序的结果集可能会很好。
SELECT * FROM content where subcontentID = contentID ORDER BY subcontentID,contentID
这将为您提供所有内容记录,将所有子内容记录按顺序保存在一起。
根据相同的架构创建重复的表格,这一点也不错。