Sql 从映射表中获取列值;id“值”;结合
我正在尝试获取与我的项目关联的所有列,有些列是“key | value”成对的,这就是我的问题所在。我对结构的想法是这样的 我可以通过此查询从帖子中检索1个项目以及所有关联的标记名,但问题是我只能获取1个帖子Sql 从映射表中获取列值;id“值”;结合,sql,sql-server,Sql,Sql Server,我正在尝试获取与我的项目关联的所有列,有些列是“key | value”成对的,这就是我的问题所在。我对结构的想法是这样的 我可以通过此查询从帖子中检索1个项目以及所有关联的标记名,但问题是我只能获取1个帖子 SELECT TOP(10) bm.title, bm.post_id, a.name AS tag1, b.name AS tag2, c.name AS tag3, d.name AS tag4 FROM Posts AS bm I
SELECT TOP(10)
bm.title, bm.post_id,
a.name AS tag1, b.name AS tag2, c.name AS tag3, d.name AS tag4
FROM
Posts AS bm
INNER JOIN
Tagmap AS tm
INNER JOIN
Tag AS a ON a.tag_id = tm.tag_id1
INNER JOIN
Tag AS b ON b.tag_id = tm.tag_id2
INNER JOIN
Tag AS c ON c.tag_id = tm.tag_id3
INNER JOIN
Tag AS d ON d.tag_id = tm.tag_id4
ON bm.post_id = tm.post_id
这是该表的DDL,也可以从以下链接获取:
创建表标记
(
tag_id int非空标识(0,1)主键,
名称nvarchar(30)不为空,
);
创建表标记映射
(
id int非空标识(0,1)主键,
post_id int外键引用post(post_id),
tag_id1 int外键引用标记(tag_id),
tag_id2 int外键引用标记(tag_id),
tag_id3 int外键引用标记(tag_id),
tag_id4 int外键引用标记(tag_id)
);
创建表格帖子
(
post_id int NOT NULL标识(0,1)主键,
标题nvarchar(50)不为空,
);
在POST中插入值(“标题1”);
在POST中插入值(“标题2”);
插入标签值(“标签编号1”);
插入标签值(“标签编号2”);
插入标签值(“标签号三”);
插入标签值(“标签编号4”);
插入标记映射值(0、0、1、2、3);
我的问题是:我的方法完全错了吗?我应该改变结构还是好的
如果是这样的话,如何才能做得更好?我如何才能在我的帖子中检索所有这些“key | value”列?评论太长了 首先,您应该修复您的数据结构,以便在
tagMap
中每post\u id
和tag\u id
有一行,而不是四行
但以你目前的结构来看,我想并不是所有的帖子都有四个标签。因此,对于您当前的数据模型,您应该使用
左连接
,而不是内部连接
,良好的反馈,每个post\u id和tag\u id在tagMap中有一行是更好的方法。谢谢你给我指出了正确的方向(讽刺的是,这确实适合评论,还剩下271个字符:)