这是我的胶卷桌:
FILM (Catalog_Num, Format, Title, Year, Number_Discs, Rating, Timing, Genre)我想连接体裁专栏,如果是1970年之前,它不能重复,例如,如果类型是浪漫主义->(经典浪漫)它的好。
但是这种类型已经是经典了,它应该保持经典而不是经典(经典)
在那之后,我必须列出所有经典电影的id,标题和类型。
以下是我尝试过的:
select genre|| 'Classic'
from film where (year <1970 and genre not in ('Classic'));
select film_id, title, genre
from inventory, film
where film.catalog_num = inventory.catalog_num and genre like '%Classic%';但其输出只显示了所有类型的经典类型,而不是浪漫经典。此外,我必须在一个查询中完成,但我不知道如何将它们组合起来。
发布于 2019-03-23 08:08:00
使用子查询操作数据并将其输入主查询:
with films as (
select catalog_num
, title
, case
when (year <1970 and genre not in ('Classic'))
then 'Classic ' || genre
else genre end as genre
from film
)
select inventory.film_id
, films.title
, films.genre
from inventory
join films on films.catalog_num = inventory.catalog_num
where films.genre like '%Classic%';你的问题说你想要浪漫->(经典浪漫),但你的张贴代码有genre||'Classic,这是相反的。我已经更改了代码以生成“经典浪漫”。
注意:您还没有在第二个查询的投影中别名列,所以我不得不猜测哪些列来自film,哪些列来自inventory。你需要纠正任何错误的猜测。
发布于 2019-03-23 11:59:41
如果你只想要你对类电影的定义,那么你就不必去接受这种类型的电影。只要做:
select i.film_id, f.title, f.genre
from inventory i join
films f
on f.catalog_num = i.catalog_num
where f.genre like '%Classic%' or f.year < 1970;如果你还想要“经典”这个体裁:
select i.film_id, f.title,
(case when f.year < 1970 and f.genre <> 'Classic'
then 'Classic ' || f.genre
else f.genre
end) as genre
from inventory i join
films f
on f.catalog_num = i.catalog_num
where f.genre like '%Classic%' or f.year < 1970;你的问题是有点模糊的“经典”是否可以是一个流派的名称,而不是整个名称。所以你可能想:
(case when f.year < 1970 and f.genre not like '%Classic%'
then 'Classic ' || f.genre
else f.genre
end) as genre请注意,这种比较在Oracle中通常是区分大小写的,因此您可能还需要考虑大写/小写。
https://stackoverflow.com/questions/55311781
复制相似问题