Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从映射表中获取列值;id“值”;结合_Sql_Sql Server - Fatal编程技术网

Sql 从映射表中获取列值;id“值”;结合

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

我正在尝试获取与我的项目关联的所有列,有些列是“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 
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个字符:)