Mysql 从透视表返回单行

Mysql 从透视表返回单行,mysql,sql,Mysql,Sql,我有以下三张桌子 Create table posts ( post_id Int UNSIGNED NOT NULL AUTO_INCREMENT, post_title Varchar(255) NOT NULL, Primary Key (post_id)) ENGINE = InnoDB; Create table publishers ( publisher_id Int UNSIGNED NOT NULL AUTO_INCREMENT, publi

我有以下三张桌子

Create table posts (
    post_id Int UNSIGNED NOT NULL AUTO_INCREMENT,
    post_title Varchar(255) NOT NULL,
 Primary Key (post_id)) ENGINE = InnoDB;

Create table publishers (
    publisher_id Int UNSIGNED NOT NULL AUTO_INCREMENT,
    publisher_name Varchar(255) NOT NULL,
 Primary Key (publisher_id)) ENGINE = InnoDB;

Create table publisher_terms (
    term_id Int UNSIGNED NOT NULL AUTO_INCREMENT,
    post_id Int UNSIGNED NOT NULL,
    publisher_id Int UNSIGNED NOT NULL,
 Primary Key (term_id)) ENGINE = InnoDB;
我想用一个发布者检索所有帖子。我尝试了以下内部查询,但我的“我得到未知列”错误

select P.post_title FROM posts P, (SELECT PB.publisher_id FROM publisher_terms PB WHERE P.post_id=PB.post_id LIMIT 1) PT;

您可以使用此帖子通过publisher检索帖子。由于帖子标题可能不唯一,我在结果中包含
post\u id

select P.post_id, P.post_title, MAX(PS.publisher_name) publisher_name
FROM publisher_terms T
   JOIN posts P
      ON T.post_id = P.post_id
   JOIN publishers PS
      ON T.publisher_id = PS.publisher_id
GROUP BY P.post_id, P.post_title

这并不能解决潜在的“为什么这不起作用?”问题,但是否可以将其重新编写为一个连接,并在publisher_术语上使用计数聚合,然后在group by中使用Having子句来限制它

有更明确的指示,但可能是:

SELECT P.post_title, count(publisher_id) as c
  FROM posts P
    JOIN publisher_terms PT
  ON P.post_id = PT.post_id
GROUP BY P.post_title
HAVING c = 1

完整错误是什么?where子句“我要检索所有帖子”中的未知列“P.post\u id”。我没有发布者id或名称所有发布者的所有帖子?从您的帖子
中,我只想检索一个发布者的所有帖子。
对不起,如果我的问题不清楚的话。我想检索所有帖子及其发布者。将发布者限制为每篇文章一个。我希望它现在是有意义的。将发布者限制在每篇文章一个是什么意思?一篇文章可以有多个发布者?是的,正如此表所示,
publisher\u terms
一篇文章可能有一个或多个发布者