我正在嘗試查詢所有分數高于隨機選擇的電影分數的電影。我不明白修復我的查詢的錯誤。
列出比資料庫中某些電影得分更高的電影標題。
(不要將“某些”電影硬編碼為任何特定電影,例如“泰坦尼克號”。)
SELECT TITLE FROM MOVIE
WHERE SCORE > (SELECT SCORE FROM MOVIE);
uj5u.com熱心網友回復:
正如@Halim Saad-Rached 在他們的回答中提到的那樣,SELECT SCORE FROM MOVIE回傳多行,然后您嘗試將外部查詢中的每一行與內部查詢中的多行進行比較。
我正在嘗試查詢所有分數高于隨機選擇的電影分數的電影。
您需要找到單個隨機電影而不是所有電影。
從 Oracle 12 開始,您可以使用:
SELECT TITLE
FROM MOVIE
WHERE SCORE > (SELECT SCORE
FROM MOVIE
ORDER BY DBMS_RANDOM.VALUE()
FETCH FIRST ROW ONLY
);
或者,在早期版本中:
SELECT TITLE
FROM MOVIE
WHERE SCORE > (SELECT score
FROM (
SELECT SCORE
FROM MOVIE
ORDER BY DBMS_RANDOM.VALUE()
)
WHERE ROWNUM = 1
);
或者,使用分析函式只查詢表一次:
SELECT title
FROM (
SELECT title,
score,
MIN(score)
KEEP (DENSE_RANK FIRST ORDER BY DBMS_RANDOM.VALUE(), ROWNUM)
OVER ()
AS random_score
FROM MOVIE
)
WHERE score > random_score;
db<>在這里擺弄
uj5u.com熱心網友回復:
子查詢SELECT SCORE FROM MOVIE不回傳電影的隨機分數,換句話說,是一個標量,而是一個分數串列。您不能將 > 左側的標量與其右側的串列(子查詢的結果)進行比較。這在語法上是錯誤的。您可以通過許多不同的方式糾正此問題。這取決于你想要什么。以下是使用 > 運算子的一些作業示例:
SELECT TITLE FROM MOVIE
WHERE SCORE > (SELECT MAX(SCORE) FROM MOVIE)
SELECT TITLE FROM MOVIE
WHERE SCORE > (SELECT MIN(SCORE) FROM MOVIE)
SELECT TITLE FROM MOVIE
WHERE SCORE > ALL (SELECT SCORE FROM MOVIE
SELECT TITLE FROM MOVIE
WHERE SCORE > ANY (SELECT SCORE FROM MOVIE)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/430684.html
