【问题标题】:AND operator between some columns of one table一个表的某些列之间的 AND 运算符
【发布时间】:2020-12-21 21:44:25
【问题描述】:

通过一个严重的连接,我有这个表,其中的行是作者的名字、他的书名和书的 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

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

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    你可以使用聚合:

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

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

    【讨论】:

    • 感谢您的回复。这只是解释我的问题的示例表。实际上这是更多表之间连接的结果,在女巫中也有书籍表。但是使用此解决方案,如果用户搜索 3 个作者,并且在查询中会出现“其中 AuthorName in ('a1', 'a2','a3')”,则结果不是空字符串。我能说一下为什么要在查询中插入“有 count(*) = 2”吗?
    • @Brododipollo 。 . .对于三位作者,2 将是 3
    猜你喜欢
    • 2019-05-20
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    相关资源
    最近更新 更多