Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Select所有至少有一个评级为4或更高的书籍的标题必须按字母顺序排列_Sql - Fatal编程技术网

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;

审阅者
表与问题无关。

子查询可能会返回多行。如果是,则无法对结果进行比较。添加一些示例表数据和预期结果。如何返回多行子查询可能会返回多行。如果是,则无法对结果进行比较。添加一些示例表数据和预期结果。(作为格式化文本,而不是图像。)如何返回多行数据已添加数据已添加