【发布时间】:2019-03-21 20:01:03
【问题描述】:
我有一张表,其中包含名为TaggedTitles 的标题和标签 ID。我有第二个表,其中包含标签和 TagID。 TaggedTitles 表有多个与每个标题相关联的标签。例如:
TaggedTitles 表:与标题“汽车”相关联的 TagID 列包含:1,5,7 表示标签表中的标签。在本例中,1,5,7 代表标签:车轮、油漆、地毯。我需要离开加入标签表以使用标题汽车作为参数返回车轮、油漆、地毯。
SELECT
Tags.TAGS
FROM
Tags
LEFT JOIN
TaggedTitles ON TaggedTitles.TAGID = Tags.TAGID
WHERE
TaggedTitles.TITLE = @Title
标题表
TAG_ID TITLE
-------------
1 FRUIT
2 FRUIT
3 FRUIT
标签表
TAG_ID TAG
----------------------
1 ORANGES
2 APPLES
3 PEARS
需要结果:来自参数“水果”的Oranges,Apples,Pears
【问题讨论】:
-
呃……你有机会修复数据模型吗?存储分隔字符串违反了 1NF,并且使用起来很痛苦。每次查询它以查找行时,您都必须在分隔符上拆分整个表。此外,您上面的 where 子句已将您的左连接变成了内连接。
-
我想我可以。最好将标题“汽车”存储在三个单独的行中,每个标签分别存储?我没有意识到在列中使用分隔字符串会这么复杂。
-
如果您可以分享您当前的架构和几行示例数据,我可以展示如何规范您的结构。一旦这被规范化查询,这将是无痛的。
-
@SeanLange 我已更改数据模型,使其看起来像我在原始问题中粘贴的表格。
-
那么您需要返回一个分隔列表吗?有数百个使用 STUFF 和 FOR XML 来实现此目的的示例。
标签: sql-server stored-procedures