【问题标题】:MariaDB Query with multiple joins具有多个连接的 MariaDB 查询
【发布时间】:2023-03-07 07:30:01
【问题描述】:

在这个数据库中

https://www.databasestar.com/sample-database-movies/

我想进行以下查询:“列出电影《巴西》中所有演员的姓名和类型”。

我做这个查询:

USE movies;

SELECT DISTINCT p.person_name AS 'Nombre', g.gender AS 'Sexo' FROM movie m 
JOIN movie_crew mc ON m.movie_id = mc.movie_id 
JOIN department d ON mc.department_id = d.department_id 
JOIN movie_cast mc2 ON m.movie_id = mc2.movie_id 
JOIN person p ON mc2.person_id = p.person_id 
JOIN gender g ON mc2.gender_id = g.gender_id
WHERE m.title = 'Brazil' AND d.department_name = 'Actors'; 

但是没有结果出现,我不明白我的错误在哪里。

谢谢。

【问题讨论】:

  • use text, not images/links, for text--including tables & ERDs。仅将图像用于无法表达为文本或增强文本的内容。在图像中包含图例/键和说明。 (但如果一个表是 minimal reproducible example 基数,那么无论如何您都将在 DDL 的代码中以文本形式提供其 ERD 信息。)
  • 请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 暂停总体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你的期望和原因。
  • 您必须深入挖掘数据。我删除了 WHERE 子句的部分:AND d.department_name = 'Actors' ... 并找到了记录。该查询组合中碰巧没有任何 department_id = 12(对于演员)。
  • 在这种情况下考虑演员的“流派”是没有意义的。你是指角色的“性别”吗?
  • 嗨。感谢您的回答和建议。是的,我指的是“性别”,而不是“类型”,抱歉。

标签: mysql join mariadb


【解决方案1】:

我建议您稍微简化一下架构。

  • 只需对流派、语言角色、关键字、性别、人名使用简单的字符串
  • 使用 iso_code 代替 country_id
  • 也许是部门和公司的简单缩写
  • 这些确实需要规范化(正如您所做的那样):人物、电影、公司,但主要是因为这些实体中还有其他内容。

即去掉最左边和最右边列的大部分表格。

一旦您进行了更改,错误可能会神秘地消失。 (而且,当您获得更多数据时,查询会运行得更快。这确实假设您有合适的索引。)

【讨论】:

  • 看起来像一个作业
猜你喜欢
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 2018-12-13
  • 1970-01-01
  • 2023-03-14
相关资源
最近更新 更多