1

我有两张桌子

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_id:1
具有主题 3 的 Book_Id:1,2,3
具有主题 1 和 3 的 BookId:1

这是我的查询:

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

但它返回 Book_ids of : 1 和 3 而它应该只返回 1。看来我的查询返回联合,而它应该返回一个交集。

有人可以帮我修复它吗?

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、3”字符串值而不是 1 或 2 或 3 个 int 值的子集。正确的查询如下

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 回答