2010-10-19 38 views
0

说我有以下数据:通过sqlite3选择行中至少有X行与列中的一些值?

|bookID|data| 
|1|a| 
|1|b| 
|1|c| 
|2|x| 
|2|y| 
|3|t| 

我想选择所有至少有X行的书籍。所以如果X = 3,那么我只会得到bookID = 1的所有行。如果X = 2,那么我只能得到bookID = 1或bookID = 2的所有行,等等。

我可以用SQLite3做到这一点吗?

回答

2

此示例将获得所有具有3行或更多行的书籍。

SELECT * FROM Books WHERE BookID IN 
    (SELECT BookID FROM Books GROUP BY BookID HAVING COUNT(*) >= 3) 
+0

这似乎并不奏效。 – ocodo 2010-10-19 21:52:33

+0

我没有这台计算机上的SQLite来测试它,但它应该可以工作。你看到了什么结果? – 2010-10-19 21:56:43

+0

1,a(换行符)1,b(换行符)1,c(换行符)---奇怪的呃! – ocodo 2010-10-19 22:00:37

0

这是一种通过加入一个子查询做到这一点:

SELECT bookID FROM books 
    JOIN (SELECT COUNT(*) AS book_count,bookID FROM books GROUP BY bookID) 
     USING (bookID) 
    WHERE book_count >= 2 
    GROUP BY bookID 

Larry Lustig’s answer是冗长的要少得多(也可能更快,太)。

+0

我希望我可以将两个答案都标记为正确。然而,Larry Lustig绝对有效,但仅限于只有一个索引。这个解决方案允许你有多个索引,并且最终我不得不用另一个类似的问题来解决这个问题。 – 2010-10-20 19:36:23

相关问题