我的任务是将黑色,白色和灰色列表放在数据库中。每当有人注意到一个新单词时,都应该将其添加到数据库中。这些列表中只有很少的单词。所以我想添加一个包含几个单词的内容。
上面你可以看到我的桌子。我想查询几个单词到一个ContentID。 它应该是这样的:
ContentID Words
1 "Password", "Login", "Configure"
2 ".nl", ".be", ".com"
如何查询多个值到一个ContentID?
答案 0 :(得分:2)
不要这样做 。
您的设计存在缺陷。字段设计为仅包含一个原子数据项。试图将多个项目填充到一个字段中会限制系统的增长,并使事情变得更加困难。
如果你需要沿着这些方向做一些事情,那就像创建你的桌子一样(非常粗略的草图!):
CREATE TABLE List(ListID int, Name nvarchar(100));
CREATE TABLE Content(ContentID int, ListID int);
CREATE TABLE ContentWords(ContentID int, Word nvarchar(100), Position int);
您仍然可以通过加入两个表来阅读单个内容记录的所有单词,但现在还有许多其他内容可供您使用。如果您发现特别需要将它们作为应用程序的逗号分隔列表读取,您甚至可以使用FOR XML PATH('')技巧来执行此操作 - 请参阅http://sqlandme.com/2011/04/27/tsql-concatenate-rows-using-for-xml-path/了解更多信息资讯
答案 1 :(得分:1)
(续评)您可以这样做:
DECLARE @List TABLE (ID INT, ListName VARCHAR(MAX))
DECLARE @Word TABLE (ID INT, ListID INT, Word VARCHAR(MAX))
INSERT @List (ID, ListName)
VALUES (0 , 'White'),
(1 , 'Black')
INSERT @Word (ID, ListID, Word)
VALUES (0, 0, 'Good'),
(1, 0, 'Better'),
(2, 0, 'Best'),
(3, 1, 'Bad'),
(4, 1, 'Worse'),
(5, 1, 'Worstest')
SELECT L.ID
, L.ListName
, STUFF(( SELECT ',' + W.Word AS [text()]
FROM @Word AS W
WHERE w.ListID = L.ID
FOR XML PATH('')
), 1, 1, '' ) test
FROM @List L
结果是:
ID ListName test
0 White Good,Better,Best
1 Black Bad,Worse,Worstest
非常粗略地说,但请按照以下思路思考。