1

SQLとデータベースを初めて使用します。検索するにはSQLクエリを作成する必要があります。

all posts that have tags with tagname='t1'

投稿とタグの関係は多対多です

そこで、以下のようにスキーマといくつかの挿入ステートメントを作成しました。

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'ですか?クエリを実行only the two tables Posts and Tagsして正しい結果を取得することは可能ですか?または、Posts_Tagsテーブルも使用する必要がありますか?

許してください。ただし、rdbmsとSQLについてはほとんど知識がありません。

4

3 に答える 3

2

いいえ-3つのテーブルが必要です。

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';

このテーブルレイアウトは、投稿とタグの間にマントツーマンの関係を作成するための正しい方法です。Posts_Tagsは連想テーブルと呼ばれます。

于 2011-08-14T08:01:22.777 に答える
1

t_nameが「t1」の投稿のIDを見つけるには、タグをpost_tagsと結合する必要があります。すなわち

SELECT 
    p_id 
FROM 
    Post_Tags INNER JOIN Tags ON Post_Tags.t_id=Tags.t_id 
WHERE 
    t_name='t1'

投稿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'
于 2011-08-14T08:04:43.320 に答える
1

3 つのテーブルが必要です。使用する必要があるクエリは次のとおりです(テストされていません):

SELECT p_name
FROM Posts AS p
INNER JOIN Posts_Tags AS pt ON pt.p_id = p.p_id
INNER JOIN Tags AS t ON pt.t_id = t.t_id
WHERE t.t_name = 't1';
于 2011-08-14T08:05:27.420 に答える