有一张桌子,桌子上有书籍和作者。用户添加了多少作者,未知。我们需要提取那些拥有三位以上作者的书籍的名称。 当然,有一个简单的解决方案:添加一个额外的字段,其中包含每本书的作者数量。然后:
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。您还可以更改表的结构。如果提出的解决方案是激进的
,就是这种情况答案 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以获取示例。