SQL如何根据多行中的值选择行
Posted
技术标签:
【中文标题】SQL如何根据多行中的值选择行【英文标题】:SQL How to select rows based on values from multiple rows 【发布时间】:2021-03-22 09:32:54 【问题描述】:您好,我遇到了以下表格的问题
CREATE TABLE BOOKS (
Title varchar(255),
Year INT,
Type ENUM("Horror", "Fantasy"),
Pages INT,
PRIMARY KEY (Title, Year)
);
CREATE TABLE AUTHORS(
Title varchar(255),
Year INT,
PlaceOfBirth varchar(255),
AuthorName varchar(255),
PRIMARY KEY (Title, Year, PlaceOfBirth ),
FOREIGN KEY (Title, Year) REFERENCES BOOKS(Title, Year)
);
现在我想查询所有只有 40 页及以上恐怖书的作者。
SELECT a.AuthorName, b.Pages FROM AUTHORS a INNER JOIN BOOKS b ON a.Title=b.Title AND a.Year=b.Year
WHERE b.Type="Horror" AND b.Pages > 40
问题是现在我得到了那些写过 40 页以上的恐怖书的作者,但他们也可能有不到 40 页的恐怖书。我想要那些只写 40 页或更长的恐怖书的作者。
【问题讨论】:
【参考方案1】:如果你想知道至少写过一本恐怖书并且所有这些书都超过 40 页的作者的名字,你可以使用group by
和having
:
select a.authorname
from authors a
inner join books b on a.title = b.title and a.year = b.year
where b.type = 'Horror'
group by a.authorname
having min(b.pages) > 40
【讨论】:
我正在考虑,但是当我尝试它时 mysql 抛出一个错误 SELECT 列表的表达式 #2 不在 GROUP BY 子句中并且包含非聚合列以上是关于SQL如何根据多行中的值选择行的主要内容,如果未能解决你的问题,请参考以下文章