SQL Select所有至少有一个评级为4或更高的书籍的标题必须按字母顺序排列
给您三张表格:SQL Select所有至少有一个评级为4或更高的书籍的标题必须按字母顺序排列,sql,Sql,给您三张表格: create table books(id int, title varchar(250), year int, author varchar(250)); create table reviewers(id int, name varchar(250)); create table ratings(reviewer_id int, book_id int, rating int, rating_date date); 选择至少有一个评级为4或更高的所有书籍的标题 标题必须
create table books(id int, title varchar(250), year int, author varchar(250));
create table reviewers(id int, name varchar(250));
create table ratings(reviewer_id int, book_id int, rating int, rating_date date);
选择至少有一个评级为4或更高的所有书籍的标题
标题必须按字母顺序排列。
我的说法有什么错:
SELECT title FROM books WHERE id = (SELECT book_id FROM ratings WHERE rating >= 4) ORDER BY title;
SELECT title FROM books WHERE id IN (SELECT book_id FROM ratings WHERE rating >= 4) ORDER BY title;
预期结果:
A Tale Of Two Cities
And Then There Were None
Dream of the Red Chamber
She: A History of Adventure
书籍:样本数据
id title year author
101 A Tale Of Two Cities 1859 Charles Dickens
102 The Lord of the Rings 1955 J. R. R. Tolkien
103 The Hobbit 1937 NULL
104 The Little Prince 1943 Antoine de Saint-Exupéry
id name
15201 Joe Martinez
53202 Alice Lewis
44203 John Smith
Ratings: sample data
reviewer_id book_id rating rating_date
15201 101 2 2015-02-11
15201 101 4 2015-06-16
53202 103 4 NULL
评审员:样本数据
id title year author
101 A Tale Of Two Cities 1859 Charles Dickens
102 The Lord of the Rings 1955 J. R. R. Tolkien
103 The Hobbit 1937 NULL
104 The Little Prince 1943 Antoine de Saint-Exupéry
id name
15201 Joe Martinez
53202 Alice Lewis
44203 John Smith
Ratings: sample data
reviewer_id book_id rating rating_date
15201 101 2 2015-02-11
15201 101 4 2015-06-16
53202 103 4 NULL
您需要在语句中将该
=
更改为:
SELECT title FROM books WHERE id = (SELECT book_id FROM ratings WHERE rating >= 4) ORDER BY title;
SELECT title FROM books WHERE id IN (SELECT book_id FROM ratings WHERE rating >= 4) ORDER BY title;
…因为您的内部SELECT
可以返回多个结果。您需要在语句中将该=
更改为:
SELECT title FROM books WHERE id = (SELECT book_id FROM ratings WHERE rating >= 4) ORDER BY title;
SELECT title FROM books WHERE id IN (SELECT book_id FROM ratings WHERE rating >= 4) ORDER BY title;
…因为您的内部选择可以返回多个结果。如果没有您的数据,很难说,但请尝试以下方法:
SELECT
title
FROM
books
WHERE id IN
(SELECT DISTINCT book_id FROM ratings WHERE rating >= 4)
ORDER BY title;
带有=的WHERE子句需要一个值,而不是一组可能的值,如果具有评级的书籍有多个记录,则您的子选择可以多次包含相同的书籍ID
试一试。没有你的数据很难说,但是试试这个:
SELECT
title
FROM
books
WHERE id IN
(SELECT DISTINCT book_id FROM ratings WHERE rating >= 4)
ORDER BY title;
带有=的WHERE子句需要一个值,而不是一组可能的值,如果具有评级的书籍有多个记录,则您的子选择可以多次包含相同的书籍ID
试一试。而不是:
...WHERE id = (SELECT...
你想要:
...WHERE id IN (SELECT...
而不是:
...WHERE id = (SELECT...
你想要:
...WHERE id IN (SELECT...
您需要使用“加入”:
SELECT title FROM books b
JOIN ratings r ON b.id = r.book_id
WHERE r.rating >= 4
ORDER BY b.title;
或子查询的“IN”IN WHERE子句:
SELECT title FROM books WHERE id IN
(SELECT book_id FROM ratings WHERE rating >= 4)
ORDER BY title;
审阅者
表与问题无关。您需要使用JOIN:
SELECT title FROM books b
JOIN ratings r ON b.id = r.book_id
WHERE r.rating >= 4
ORDER BY b.title;
或子查询的“IN”IN WHERE子句:
SELECT title FROM books WHERE id IN
(SELECT book_id FROM ratings WHERE rating >= 4)
ORDER BY title;
审阅者
表与问题无关。子查询可能会返回多行。如果是,则无法对结果进行比较。添加一些示例表数据和预期结果。如何返回多行子查询可能会返回多行。如果是,则无法对结果进行比较。添加一些示例表数据和预期结果。(作为格式化文本,而不是图像。)如何返回多行数据已添加数据已添加