牛客网数据库SQL实战30—— 使用子查询的方式找出属于Action分类的所有电影对应的title,description

牛客网数据库SQL实战30—— 使用子查询的方式找出属于Action分类的所有电影对应的title,description

题目描述

film表

字段 说明
film_id 电影id
title 电影名称
description 电影描述信息
    CREATE TABLE IF NOT EXISTS film (
    film_id smallint(5)  NOT NULL DEFAULT '0',
    title varchar(255) NOT NULL,
    description text,
    PRIMARY KEY (film_id));

category表

字段 说明
category_id 电影分类id
name 电影分类名称
last_update 电影分类最后更新时间
    CREATE TABLE category  (
    category_id  tinyint(3)  NOT NULL ,
    name  varchar(25) NOT NULL, `last_update` timestamp,
    PRIMARY KEY ( category_id ));

film_category表

字段 说明
film_id 电影id
category_id 电影分类id
last_update 电影id和分类id对应关系的最后更新时间
    CREATE TABLE film_category  (
    film_id  smallint(5)  NOT NULL,
    category_id  tinyint(3)  NOT NULL, `last_update` timestamp);

使用子查询的方式找出属于Action分类的所有电影对应的title,description

输入描述:

输出描述:

我的解答

select f.title as film,f.description as description
from film f
where f.film_id in(
    select film_id
    from film_category
    where category_id in(
        select category_id
        from category
        where name = 'Action'
    )
)

根据题意,必须使用子查询,通过category表找到name为Action的category_id,再根据category_id从film_category表找到film_id,最后在film表中找出符合条件的数据。

我觉得最好的答案

子查询解法:

select f.title,f.description from film as f
where f.film_id in (select fc.film_id from film_category as fc
               where fc.category_id in (select c.category_id from category as c
                                        where c.name = 'Action'));

非子查询解法:

select f.title,f.description
from film as f inner join film_category as fc on f.film_id = fc.film_id
               inner join category as c on c.category_id = fc.category_id
where c.name = 'Action';
发布了175 篇原创文章 · 获赞 58 · 访问量 37万+

猜你喜欢

转载自blog.csdn.net/sunbocong/article/details/105721462