You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何编写MySQL查询语句连接Sakila数据库的film与language表以获取影片及其语言和原始语言信息

没问题,这个需求其实很容易实现——你只需要两次关联language,并且给每个关联的表起不同的别名来区分两种语言即可。

为什么要两次关联?

因为你需要获取两类语言信息:影片当前使用的语言(对应film.language_id),以及影片的原始语言(对应film.original_language_id)。这两个字段都关联到language表的主键,所以我们需要分别把它们和language表做关联,用别名来避免字段冲突。

修改后的查询语句

这里推荐用LEFT JOIN而不是INNER JOIN来关联原始语言,因为有些影片可能没有设置原始语言(original_language_idNULL),LEFT JOIN可以保证这些影片的信息依然能被查询出来:

SELECT 
    film.title,
    film.description,
    film.release_year,
    -- 当前影片语言信息,用别名区分
    lang.language_id AS film_language_id,
    lang.name AS film_language_name,
    -- 原始影片语言信息,同样用别名
    original_lang.language_id AS original_language_id,
    original_lang.name AS original_language_name
FROM film
-- 关联当前影片语言
INNER JOIN language AS lang ON film.language_id = lang.language_id
-- 关联原始影片语言,用LEFT JOIN兼容NULL的情况
LEFT JOIN language AS original_lang ON film.original_language_id = original_lang.language_id;

关键说明

  • 给两次关联的language表分别起了langoriginal_lang的别名,这样MySQL就能区分你要调用哪一个关联表的字段了。
  • 给查询出来的语言字段也起了别名(比如film_language_name),这样结果集里的字段会更清晰,不会出现多个namelanguage_id导致混淆的情况。
  • 如果确定所有影片都有原始语言,也可以把LEFT JOIN换成INNER JOIN,但LEFT JOIN的兼容性更好。

内容的提问来源于stack exchange,提问作者John

火山引擎 最新活动