Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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查询以从两个表中获取数据_Sql_Create Table - Fatal编程技术网

如何创建正确的SQL查询以从两个表中获取数据

如何创建正确的SQL查询以从两个表中获取数据,sql,create-table,Sql,Create Table,我不熟悉SQL和数据库。。我需要创建一个SQL查询来查找 all posts that have tags with tagname='t1' 贴子和标签之间的关系是多对多的 因此,我创建了模式和一些insert语句,如下所示: create table Posts( p_id int , p_name varchar ); create table Tags( t_id int , t_name varchar ); 因为多对多关系需要一个联接表,所以我也创建了它 create ta

我不熟悉SQL和数据库。。我需要创建一个SQL查询来查找

all posts that have tags with tagname='t1'
贴子和标签之间的关系是多对多的

因此,我创建了模式和一些insert语句,如下所示:

create table Posts(
p_id int ,
p_name varchar 
);

create table Tags(
t_id int ,
t_name varchar 
);
因为多对多关系需要一个联接表,所以我也创建了它

create table Posts_Tags(
p_id int,
t_id int 
);

insert into Posts values('1','P1' );
insert into Posts values('2','P2' );
insert into Posts values('3','P3' );

insert into Tags values ('1','t1');
insert into Tags values ('2','t2');
insert into Tags values ('3','t3');
insert into Tags values ('4','t4');
insert into Tags values ('5','t5');

insert into Posts_Tags values('1','1' );
insert into Posts_Tags values('1','2' );
insert into Posts_Tags values('2','1' );
insert into Posts_Tags values('2','3' );
insert into Posts_Tags values('3','5' );
现在,我应该如何进行SQL查询以获取所有带有
t_name='t1'
标记的帖子?是否可以只查询两个表POST和Tags并得到正确的结果?或者我也应该使用Posts\U Tags表


请原谅,我对rdbms和SQL知之甚少。

不-您需要三个表:

select p.*
from Posts p
join Posts_Tags pt on pt.p_id = p.p_id
join Tags t on t.t_id = pt.t_id
where t.t_name = 't1';

此表布局是在POST和标记之间创建多对多关系的正确方法。Posts\u标记称为表。

否-您需要三个表:

select p.*
from Posts p
join Posts_Tags pt on pt.p_id = p.p_id
join Tags t on t.t_id = pt.t_id
where t.t_name = 't1';

此表布局是在POST和标记之间创建多对多关系的正确方法。Posts\u标记称为表。

您需要将标记与post\u标记连接起来,以查找t\u名称为“t1”的帖子ID。i、 e

如果您想要更多的详细信息,而不仅仅是post ID,则需要连接所有3个表,如:

SELECT 
    p.p_id, p.p_name
FROM 
    Posts p INNER JOIN Post_Tags ON p.p_id=Post_Tags.p_id
       INNER JOIN Tags ON Post_Tags.t_id=Tags.t_id 
WHERE 
    t_name='t1'

您需要将标签与post_标签连接起来,以查找t_名称为“t1”的帖子的ID。i、 e

如果您想要更多的详细信息,而不仅仅是post ID,则需要连接所有3个表,如:

SELECT 
    p.p_id, p.p_name
FROM 
    Posts p INNER JOIN Post_Tags ON p.p_id=Post_Tags.p_id
       INNER JOIN Tags ON Post_Tags.t_id=Tags.t_id 
WHERE 
    t_name='t1'

你需要这三张桌子。以下是您应该使用的查询(未测试):


你需要这三张桌子。以下是您应该使用的查询(未测试):