Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 一个表的某些列之间的AND运算符_Mysql_Sql - Fatal编程技术网

Mysql 一个表的某些列之间的AND运算符

Mysql 一个表的某些列之间的AND运算符,mysql,sql,Mysql,Sql,通过一系列的连接,我得到了这个表,其中的行是作者的名字,他的书的标题,以及书的id。如果一本书有两个或两个以上的作者,则有两行或两行以上的作者 +------------+------+--------+ | AuthorName | book | idBook | +------------+------+--------+ | a1 | b1 | 1 | | a2 | b1 | 1 | | a3 | b2 |

通过一系列的连接,我得到了这个表,其中的行是作者的名字,他的书的标题,以及书的id。如果一本书有两个或两个以上的作者,则有两行或两行以上的作者

+------------+------+--------+
| 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