【问题标题】:Mysql - Inner Join problem, output appears more times than neededMysql - Inner Join 问题,输出出现的次数比需要的多
【发布时间】:2022-01-16 22:39:20
【问题描述】:

我有问题。我试图让所有作者都只有一篇文章。它工作得很好,但是,它向我显示了完全相同的输出 3 倍。

查询:

select a.name as 'Name', a.surname as 'Surname' from author as a inner join post as p on (select count(body) from post where authorID = a.ID) = 1;

【问题讨论】:

  • 请避免发布images 的数据或查询。在您的问题中包含数据作为文本,请参阅 How to askMinimal, Reproducible Example
  • inner join post as pon 子句与p 完全无关,看起来像EXISTS 子查询或使用GROUP BY ... HAVING COUNT(*) = 1 可能是更好的选择。
  • 旁注:不要习惯使用单引号作为标识符,例如列别名。是的,遗憾的是 MySQL 接受了这一点,但在 SQL 中,单引号通常用于字符串(或日期......)文字。如果您曾经使用过另一个 DBMS(或者未来的 MySQL 版本对此更加清醒),您可能会收到错误消息。对包含特殊字符或区分大小写的标识符使用反引号,或者最好根本不使用特殊字符和区分大小写的标识符。标识符不需要是“漂亮”、“漂亮”的标头等,这是表示层的工作。

标签: mysql sql database


【解决方案1】:

您将获得每个post 的结果,而不是每个作者的结果。这是因为您加入了从 post 获取的内部查询。

我会使用内置的聚合令牌来获得所需的输出:

SELECT DISTINCT a.ID, a.name AS 'Name', a.surname AS 'Surname'
FROM author a
JOIN post p
ON p.authorID = a.ID
GROUP BY p.authorID
HAVING COUNT(p.body) = 1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    相关资源
    最近更新 更多