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
一篇文章可能有一个或多个发布者