1

私は2つのテーブルを持っています

Topic
----------------------
id  title
----------------------
1   Loops
2   Control Structure
3   Basics

Chapters
------------------------------------------------------
id  book_id topic_id chapter_number
------------------------------------------------------
1   1       1       1
2   1       2       2
3   1       3       3
4   2       1       5
5   2       3       2
6   3       3       1

トピックを検索するときに、それらのトピックに関する章があるbook_idsを表示したいと思います。トピック1と2を持つBook_ids:1
トピック3を持つBook_Ids:1,2,3
トピック1と3:1を持つBookIds

これは私の質問です:

SELECT DISTINCT chapter.book_id FROM chapter Inner Join topic ON topic.id = chapter.topic_id WHERE topic.id IN  ( '1,3');

ただし、Book_idsは1と3を返しますが、1のみを返す必要があります。私のクエリはunionを返しますが、交差点を返す必要があるようです。

誰かが私がそれを修正するのを手伝ってもらえますか?

4

2 に答える 2

0

これがSQLFiddleのデモです。'1,3'このクエリを必要なチャプターのセットに置き換えるだけです。

select book_id from Chapters
where FIND_IN_SET(topic_id,'1,3')
group by book_id 
having 
count(*) =
(length('1,3')-length(replace('1,3',',',''))+1)
于 2012-12-05T19:34:57.353 に答える
0

「IN」には、カンマ区切りの値を入力する必要があります。クエリでは、1 または 2 または 3 の int 値ではなく、'1, 3' 文字列値を含むサブセットが表示されると予想されます。正しいクエリは以下です

SELECT DISTINCT chapter.book_id 
FROM chapter 
Inner Join topic ON topic.id = chapter.topic_id 
WHERE topic.id IN  (1,3);

またはIDのみが必要な場合

SELECT DISTINCT book_id 
FROM Chapters 
WHERE topic_id IN (1,3);
于 2012-12-05T20:00:57.830 に答える