首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接一些列内容并在一个查询中进行选择

问连接一些列内容并在一个查询中进行选择
EN

Stack Overflow用户
提问于 2019-03-23 07:54:37
回答 2查看 42关注 0票数 1

这是我的胶卷桌:

代码语言:javascript
复制
FILM (Catalog_Num, Format, Title, Year, Number_Discs, Rating, Timing, Genre)

我想连接体裁专栏,如果是1970年之前,它不能重复,例如,如果类型是浪漫主义->(经典浪漫)它的好。

但是这种类型已经是经典了,它应该保持经典而不是经典(经典)

在那之后,我必须列出所有经典电影的id,标题和类型。

以下是我尝试过的:

代码语言:javascript
复制
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%';

但其输出只显示了所有类型的经典类型,而不是浪漫经典。此外,我必须在一个查询中完成,但我不知道如何将它们组合起来。

EN

回答 2

Stack Overflow用户

发布于 2019-03-23 08:08:00

使用子查询操作数据并将其输入主查询:

代码语言:javascript
复制
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。你需要纠正任何错误的猜测。

票数 2
EN

Stack Overflow用户

发布于 2019-03-23 11:59:41

如果你只想要你对类电影的定义,那么你就不必去接受这种类型的电影。只要做:

代码语言:javascript
复制
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;

如果你还想要“经典”这个体裁:

代码语言:javascript
复制
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;

你的问题是有点模糊的“经典”是否可以是一个流派的名称,而不是整个名称。所以你可能想:

代码语言:javascript
复制
       (case when f.year < 1970 and f.genre not like '%Classic%'
             then 'Classic ' || f.genre
             else f.genre
        end) as genre

请注意,这种比较在Oracle中通常是区分大小写的,因此您可能还需要考虑大写/小写。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55311781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档