首页 > 解决方案 > 一个表的某些列之间的 AND 运算符

问题描述

通过一个严重的连接,我有这张表,其中的行是作者的名字,他的书名和书的 ID。如果一本书有两个或更多作者,则有两行或更多行。

+------------+------+--------+
| AuthorName | book | idBook |
+------------+------+--------+
| a1         | b1   |      1 |
| a2         | b1   |      1 |
| a3         | b2   |      2 |
| a4         | b2   |      2 |
| a5         | b2   |      2 |
+------------+------+--------+

现在我想在女巫中创建一个过滤器,如果用户插入作者,他将获得插入作者组合的标题。例如:如果我插入“a1”和“a2”,我会得到 b1。但是如果我插入“a1”和“a3”,我会得到一个空字符串,因为这两个作者之间没有组合。

我怎样才能为这个问题写一个查询?我试过类似的东西:

select AuthorName, book, idBook
from table
where AuthorName = a1 and AuthorName = a2

但显然它不起作用,因为结果是一个空字符串。有什么建议么?

标签: mysqlsql

解决方案


您可以使用聚合:

select book, idBook
from t
where AuthorName in ('a1', 'a2')
group by book, idbook
having count(*) = 2;  -- number of elements in the list

注意:您不应该存储book在此表中。 bookid应该是对表的外键引用,例如,主键books在哪里。bookid


推荐阅读