编写引用嵌套 VARRAY 的 SQL 语句
Writing an SQL statement that references a nested VARRAY
我正在尝试编写一个 SQL 语句来查询名为 movie
的 table 中的列 actors
(定义为 VARRAY(5)
)而不使用PL/SQL,回答问题:
List any actors that appear in multiple movies, showing the movie title and actor
select a.column_value, count(*), m.title
from movie m, table (m.actors) a
where count(*) > 2,
group by a.column_value;
您应该使用 HAVING
子句而不是 where 子句来检查条件,另外 LISTAGG
可用于显示电影标题。
CREATE OR REPLACE TYPE actortype IS VARRAY(5) OF VARCHAR2(20);
/
create table movie ( id integer , title VARCHAR2(100), actors actortype );
INSERT INTO movie (
id,
title,
actors
) VALUES (
1,
'The Shawshank Redemption',
actortype('Morgan Freeman','Tim Robbins','Bob Gunton')
);
INSERT INTO movie (
id,
title,
actors
) VALUES (
1,
'The Dark Knight',
actortype('Morgan Freeman','Christian Bale','Heath Ledger')
);
查询
SELECT a.column_value as Actor,
COUNT(*) as num_of_movies,
LISTAGG( m.title, ',') WITHIN GROUP ( ORDER BY id ) as movies
FROM movie m,
TABLE ( m.actors ) a
GROUP BY a.column_value
HAVING COUNT(*) > 1;
ACTOR NUM_OF_MOVIES MOVIES
------------ ------------- -------
Morgan Freeman 2 The Dark Knight,The Shawshank Redemption
我正在尝试编写一个 SQL 语句来查询名为 movie
的 table 中的列 actors
(定义为 VARRAY(5)
)而不使用PL/SQL,回答问题:
List any actors that appear in multiple movies, showing the movie title and actor
select a.column_value, count(*), m.title
from movie m, table (m.actors) a
where count(*) > 2,
group by a.column_value;
您应该使用 HAVING
子句而不是 where 子句来检查条件,另外 LISTAGG
可用于显示电影标题。
CREATE OR REPLACE TYPE actortype IS VARRAY(5) OF VARCHAR2(20);
/
create table movie ( id integer , title VARCHAR2(100), actors actortype );
INSERT INTO movie (
id,
title,
actors
) VALUES (
1,
'The Shawshank Redemption',
actortype('Morgan Freeman','Tim Robbins','Bob Gunton')
);
INSERT INTO movie (
id,
title,
actors
) VALUES (
1,
'The Dark Knight',
actortype('Morgan Freeman','Christian Bale','Heath Ledger')
);
查询
SELECT a.column_value as Actor,
COUNT(*) as num_of_movies,
LISTAGG( m.title, ',') WITHIN GROUP ( ORDER BY id ) as movies
FROM movie m,
TABLE ( m.actors ) a
GROUP BY a.column_value
HAVING COUNT(*) > 1;
ACTOR NUM_OF_MOVIES MOVIES
------------ ------------- -------
Morgan Freeman 2 The Dark Knight,The Shawshank Redemption