Mysql 一个表的某些列之间的AND运算符
通过一系列的连接,我得到了这个表,其中的行是作者的名字,他的书的标题,以及书的id。如果一本书有两个或两个以上的作者,则有两行或两行以上的作者Mysql 一个表的某些列之间的AND运算符,mysql,sql,Mysql,Sql,通过一系列的连接,我得到了这个表,其中的行是作者的名字,他的书的标题,以及书的id。如果一本书有两个或两个以上的作者,则有两行或两行以上的作者 +------------+------+--------+ | AuthorName | book | idBook | +------------+------+--------+ | a1 | b1 | 1 | | a2 | b1 | 1 | | a3 | b2 |
+------------+------+--------+
| AuthorName | book | idBook |
+------------+------+--------+
| a1 | b1 | 1 |
| a2 | b1 | 1 |
| a3 | b2 | 2 |
| a4 | b2 | 2 |
| a5 | b2 | 2 |
+------------+------+--------+
现在我想在witch中创建一个过滤器,如果用户插入作者,他将获得插入作者组合的标题。例如:
如果我插入“a1”和“a2”,我将得到b1。但是如果我插入“a1”和“a3”,我将得到一个空字符串,因为这两个作者之间没有组合
如何编写此问题的查询?我试过这样的方法:
选择AuthorName、book、idBook
从桌子上
其中AuthorName=a1和AuthorName=a2
但很明显,它不起作用,因为结果是一个空字符串。
有什么建议吗?您可以使用聚合:
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
是主键。您可以使用聚合:
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
是主键。谢谢您的回复。这只是解释我问题的一个示例表。实际上,这是多个表之间连接的结果,在巫婆那里也有书的表。但是在这个解决方案中,如果用户搜索3个作者,并且在查询中会出现“where AuthorName in('a1','a2','a3'),那么结果不是空字符串。我能说一下为什么在查询中插入“having count(*)=2”@Brododipollo。对于三位作者,2
将是3
。感谢您的回复。这只是解释我问题的一个示例表。实际上,这是多个表之间连接的结果,在巫婆那里也有书的表。但是在这个解决方案中,如果用户搜索3个作者,并且在查询中会出现“where AuthorName in('a1','a2','a3'),那么结果不是空字符串。我能说一下为什么在查询中插入“having count(*)=2”@Brododipollo。对于三位作者来说,2
将是3
。