【问题标题】:SQL query without join没有连接的 SQL 查询
【发布时间】:2021-07-25 06:08:34
【问题描述】:

我有以下表格

Table  food                      Table Race                       Table animal
+------------+--------------+    +------------+--------------+     +------------+--------------+
| Quantity   | animal_id    |    | race_code  | race_name    |     |  animal_id | race_code    |
+------------+--------------+    +------------+--------------+     +------------+--------------+

我被要求计算每场比赛的平均食物量(race_name)。这里的挑战是我不应该使用 JOIN,因为我们还没有研究过它。 我写了以下查询:

    select AVG(f.quantity),r.race_name from food f, race r 
    group by r.race_name;

但它并没有像我想要的那样工作,因为它为所有种族返回相同的平均食物数量。我知道我必须使用动物表来链接其他 2,但我不知道如何。我应该使用子查询

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:
    select race_name ,(select avg(quantity) from food where animal_id in (select animal_id from animal a where r.race_code = a.race_code))
    from race r
    

    【讨论】:

    • 请添加解释以提高洞察力并为 OP 提供更多信息
    【解决方案2】:

    您仍然需要对相关行进行一些匹配。如果没有明确使用JOIN,您可以在WHERE 子句中执行此操作。即类似

    select AVG(f.quantity),r.race_name
    from food f, race r, animal a
    where f.animal_id = a.animal_id and a.race_code = r.race_code
    group by r.race_name;
    

    【讨论】:

      【解决方案3】:

      该问题完全与您之前的问题相同,您必须使用SUM(而不是AVG)。完全没有区别。

      啊,抱歉 - 不是你,而是你学校的同事,here

      说你“没学过连接”,好吧 - 那么你把你在这里发布的东西叫做什么?这是一个交叉连接,一旦您通过在group by 子句中不包含非聚合列并包含返回所需结果所需的额外连接来修复错误,就会产生笛卡尔积。

      “旧”语法是

      select r.name,
        avg(f.quantity) avg_quantity
      from race r, animal a, food f
      where a.race_code = r.race_code
        and f.animal_id = a.animal_id
      group by r.name;
      

      你“还没有学”的东西也是一样的,但是看起来不同:

      from race r join animal a on a.race_code = r.race_code
                  join food f on f.animal_id = a.animal_id
      

      查询的其余部分保持不变。

      现在,您应该使用JOINs 来加入 表,并将条件 放入WHERE 子句中。例如,条件是您只想计算驴的平均值。因为你没有它,所以你不需要它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-20
        • 2021-03-20
        • 1970-01-01
        • 2014-04-12
        • 2014-12-01
        • 1970-01-01
        • 2016-09-05
        • 2011-04-13
        相关资源
        最近更新 更多