SQL外连接-执行不正确

黎明脱链

我正在学习SQL,我已经学习了复数视力的基础知识课程,现在我正在通过Treehouse使用MySQL,并通过MySQL服务器使用它们建立的虚拟数据库。培训完成后,我将每天在工作中使用SQLServer。

昨天我遇到了两部分的挑战,遇到了一些麻烦。挑战中的第一个问题是:

“我们有一个带有“标题”和“ genre_id”列的“电影”表,以及一个具有“ id”和“ name”列的“流派”表。使用INNER JOIN连接“电影”和“流派”一起只能先选择电影“标题”,然后选择类型“名称”。”

理解如何正确设置JOINS令我有些困惑,因为这些概念似乎很简单,但就像在烹饪中一样,执行就是一切---我做错了。经过一番尝试和错误,工作,并反复观察了Treehouse的解释,能够弄清楚这一点。这是我通过树屋接受的答案解决了第一个问题:

SELECT movies.title, genres.name FROM movies INNER JOIN genres ON movies.genre_id = genres.id;

- 但 -

下一个我没有那么成功的挑战问题,而且我不确定我要去哪里错了。我真的很想与JOINS一起变得更好,并且挑剔所有聪明人的大脑是我可以想到的针对此特定问题(而且我敢肯定,对你们来说很简单)的解释的最佳方法。多谢您的协助,这就是我的绊脚石:

“像以前一样,带回电影'title'和类型'name',但是使用正确的OUTER JOIN来带回所有电影,而不管是否设置了'genre_id'。”

这是我提出的最接近(?)的解决方案,但是我在这里显然做错了(也许很多):

SELECT movies.title, genres.name FROM movies LEFT OUTER JOIN genres ON genres.id;

我最初尝试过此操作(如下),但是当它不起作用时,我决定删掉该语句的最后一部分,因为在要求标准中已提到该语句,因此我需要一个不在乎是否设置了genre_id的数据集电影表是否:

SELECT movies.title, genres.name FROM movies LEFT OUTER JOIN genres ON movies.genre_id = genres.id;

我知道这是小白的东西,但就像我说的,我学习,我对堆栈和互联网在大上研究了问题不一定面向对同样的问题。感激有你的专业知识和帮助,以借鉴。感谢您抽出宝贵的时间阅读本文档,如果您愿意的话,请提供帮助!

艾丽莎

您的解决方案是正确的:

SELECT movies.title, genres.name 
    FROM movies 
        LEFT OUTER JOIN genres ON movies.genre_id = genres.id

这是我的解释:

实际上,当您说“左连接”或“左外部连接”时,

不是说“您不在乎是否在电影表中设置了genre_id”,

但是“您希望显示每部电影的所有流派,但是,您不必担心在某些记录的电影表中是否未设置genre_id;在这种情况下,只显示电影即可;对于那些记录,只显示'genre = NULL'记录]”

通常,在“左联接”中,您需要:

左表的所有记录,以及它们在另一个表中的相应记录(如果有)。否则为NULL。

在您的示例中,将显示这两套记录:

1-所有已设置为流派的电影
(给出movie.title,Genres.name)

2-其他所有电影[没有类型,即genre_id = NULL]
(给movie.title,NULL)

示例(左连接):

Title, Genre
--------------
Movie1, Comedy
Movie1, Dramma
Movie1, Family
Movie2, NULL
Movie3, Comedy
Movie3, Dramma
Movie4, Comedy
Movie5, NULL

示例(带有内部联接):

Title, Genre
--------------
Movie1, Comedy
Movie1, Dramma
Movie1, Family
Movie3, Comedy
Movie3, Dramma
Movie4, Comedy

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章