SQL:采样非空字段的数量

时间:2014-11-09 17:00:03

标签: sql database-design

有一张桌子,桌子上有书籍和作者。用户添加了多少作者,未知。我们需要提取那些拥有三位以上作者的书籍的名称。 当然,有一个简单的解决方案:添加一个额外的字段,其中包含每本书的作者数量。然后:

SELECT book_name FROM books WHERE count >= 3    

但是假设添加了一个字段" count"是不可接受的。有可能以某种方式创建一个查询,将返回非空列的数量,无论它们的数量是多少? 最糟糕的可能是:

SELECT book_name FROM books 
WHERE author_1 != '' AND author_2 != '' AND author_3 != ''  

但如果作者的数量发生变化则不合适......

我注意到我自己做了一张桌子,因此该领域的作者不必是空的。 string,可以为NULL。您还可以更改表的结构。如果提出的解决方案是激进的

,就是这种情况

1 个答案:

答案 0 :(得分:1)

你提到你也可以改变表的结构,你应该这样做。

在书籍表中存储未知数量的作者是个坏主意。您应该规范化数据库并将书籍和作者存储在不同的表中,并使用联结表来连接它们,如下所示:

Table books:
BookID (primary key)
BookName

Table authors:
AuthorID (primary key)
AuthorName

Table books_authors:
BookID (foreign Key to books)
AuthorID (foreign key to authors)

然后检索有一定数量作者的书籍信息将是微不足道的。

请参阅此示例SQL Fiddle以获取示例。