当前位置: 首页 > 知识库问答 >
问题:

左联接未返回左表中的所有行

寿高阳
2023-03-14
SELECT category.name FROM category 
Action
Animation
Children
Classics
Comedy
Documentary
Drama
Family
Foreign
Games
Horror
Music
New
Sci-Fi
Sports
Travel
SELECT q1.name AS 'Film Category', COUNT(q2.name) AS '# of Films Ed Chase has appeared in' 
FROM (
    SELECT category.name FROM category 
) AS q1
LEFT JOIN (
    SELECT category.name FROM category 
    INNER JOIN film_category ON film_category.category_id = category.category_id
    INNER JOIN film ON film.film_id = film_category.film_id
    INNER JOIN film_actor ON film.film_id = film_actor.film_id
    INNER JOIN actor ON actor.actor_id = film_actor.actor_id
    WHERE actor.first_name = 'ED' AND actor.last_name = 'CHASE'
) AS q2
ON q1.name = q2.name AND '# of Films Ed Chase has starred in' >= 0
GROUP BY q2.name
ORDER BY q2.name;

它还会返回这个表,遗漏一些行(我希望它给出所有流派,而不仅仅是演员在其中扮演角色的流派):

Film Category   # of Films Ed Chase has appeared in
Animation       0
Action          2
Classics        2
Documentary     6
Drama           3
Foreign         2
Music           1
New             2
Sci-Fi          1
Sports          2
Travel          1

有趣的是,它为“动画”返回了“0”,但为“儿童”或“喜剧”没有行,这是我正在寻找的结果(所有流派都返回了)。我做错了什么?

共有1个答案

劳研
2023-03-14

count()不对null进行计数,您的左侧联接将null放在右侧表中没有值的记录中。您的外部join实际上是(或者应该是--检查这个)返回所有需要的行,但是带有聚合函数的外部select正在吃掉它们。

尝试将count()移到右侧子查询中,然后在外部查询中用ifNull(q2.count,“0”)替换它,以将Null替换为0。

我将注意到,您应该在Q1.name上分组,而不是Q2.name上分组。

 类似资料:
  • 问题内容: 我正在尝试使用以下查询获取每天打开的页面数。 我得到的输出是这样的: 问题是,在我的日表中,我有一列包含数字1到30来代表一个月中的日子。我进行了左外部连接,希望在天数列中显示所有天数! 但是我的查询正在这样做,为什么会这样呢? 谢谢大家的帮助。 问题答案: Nanne给出的答案解释了为什么您没有得到期望的结果(您的WHERE子句删除了行),但是却没有解决方法。 解决方案是将WHERE

  • 问题内容: 我在MySQL中有以下查询: 该表有27行,但查询仅返回1行。基于 这个问题, 我认为可能是由于WHERE子句。该表具有字段id,属性,字段,值,其中是第三个表的外键(我不需要从中获取数据)。 有没有一种方法可以从第一个表中选择所有行,包括表#2中字段为23的值(如果没有字段23,则为NULL)? 问题答案: 当然。将WHERE条件移动到JOIN:

  • 问题内容: 我正在尝试使用以下查询获取每天打开的页面数。 我得到的输出是这样的: 问题是,在我的日表中,我有一列包含数字1到30来表示一个月中的天数。我进行了左外部连接,希望在天数列中显示所有天数! 但是我的查询正在这样做,为什么会这样呢? 谢谢大家的帮助。 问题答案: 解决方案是将WHERE更改为AND,以便该条件成为联接条件的一部分,而不是联接之后应用的过滤器: 现在,左表中的所有行都将出现在

  • 表列如下: Users表(表名:Users): [用户表] Friends表(表名:Friends): “好友表” 我的Sql代码: 留下下面一栏: “离开栏” 如何修复此缺失的查询?请帮帮我.

  • 我有一个表格和一个表格。包含所有课程的列表,包含教授/协助该课程的志愿者列表。 我想写一个查询,返回没有任何志愿者分配给它的所有课程的列表。这就是正在发生的事情: 以下所有查询都返回 course_id 3 course_id 4 course_id 5 为什么course_id 1(正确)被遗漏,而course_id 3却不是??? 同样的问题,但没有一个解决方案对我有效: 左侧外部连接轨4

  • 问题内容: 我正在使用SQL Server(我相信是2005)。 我有2列和439行(每行都是唯一的)。 我有35列和数十万行(每行也是唯一的)。 每行都有每小时的观察和其他一些房屋管理信息。现在出于测试目的,我仅对今天的日期(即2013年4月19日)感兴趣。 如果我做: 我得到10526,这是正确的,因为每天有10526个不同的位置,每小时都有观测数据。 我想左连接TableA和TableB ,