当前位置: 首页 > 面试题库 >

SQL将第二个表中的行计数添加到主查询

陆洛城
2023-03-14
问题内容

我正在尝试改进一个(不是很多)简单的查询:

  • 我需要从表A中检索每一行。
  • 然后将表A与表B连接起来,这样我就可以获得所需的所有数据
  • 同时,我需要使用表C中的count()添加一个额外的列。

就像是:

SELECT a.*,
       (SELECT Count(*)
        FROM   table_c c
        WHERE  c.a_id = a.id) AS counter,
       b.*
FROM   table_a a
       LEFT JOIN table_b b
              ON b.a_id = a.id

可以,但是实际上,我只是在进行2个查询,因此我需要改进它,因此它只能执行一个查询(如果可能的话)。

有人知道我该怎么做到吗?


问题答案:

最简单的方法可能只是将相关子查询移到子查询中。

注意: 许多优化程序极其有效地处理了相关子查询。 您的示例查询可能是完全合理的。

SELECT
  a.*,
  b.*,
  c.row_count
FROM
  table_a   a
LEFT JOIN
  table_b   b
    ON b.a_id = a.id
LEFT JOIN
(
  SELECT
    a_id,
    Count(*)   row_count
  FROM
    table_c
  GROUP BY
    a_id
)
  c
    ON c.a_id = a.id

另一个注意事项: SQL是一个表达式,不能直接执行,而是使用嵌套循环,哈希联接等将其转换为计划。请勿假设拥有两个查询是一件坏事。
在这种情况下,与单查询然后使用GROUP BY和相比,我的示例可以大大减少读取次数COUNT(DISTINCT)



 类似资料:
  • 问题内容: 这是我的第一篇文章!希望您能帮帮我!:-) 我使用了NotePadExample提供的来自开发人员文档的代码来创建数据库。现在,我想添加第二个表来存储不同的数据。我可以毫无问题地添加注释,并且注释表的创建方式与路由表类似。我只是简单地“复制”并编辑了给定的代码,但是当我尝试插入到新表中时,出现错误消息: “ 0ERROR / Database(370):android.database

  • 我试图计算用户购物车中物品的总成本。我的方法是将项目成本和数量存储在Arraylist中,然后乘以该值再相加。例如,这是我的数组列表。我想做2.00*5.00 3.00*6.00 4.00*7.00 5.00*8.00。到目前为止,我所做的是将第一个数组列表中的第一个数字乘以第二个数组列表的每个项目。这不是我想做的,有人能帮我吗。

  • 问题内容: 我正在设计一个简单的数据库应用程序,在GUI中具有2个jComboBoxes。第一个jComboBox填充有SQL查询的结果。我希望第二个jComboBox填充第二个查询的结果,该查询在第一个框中合并了用户选择的值,但是我无法完全使它起作用。 我创建了2个类,一个类绘制GUI并包含main方法,第二个类查询我的Oracle数据库。 我的GUI类: 和我的数据库类: 我遗漏了不相关的代码

  • 问题内容: 在pgadmin3中,我想使用参数化查询(为了进行更快的调试,只需从我的php文件中复制并粘贴查询)。但是我还没有找到一个选项添加的价值观,…参数。是否有可能? 这是我正在循环中建立的查询,遵循从这里进行NULL测试的建议: 请注意,手动替换所有参数很繁琐,容易出错,并且可能(我希望)是不必要的。 提前致谢。 问题答案: 我只知道两种方式。 首先是要使用(PostgreSQL手册后的示

  • 问题内容: 我正在用SSRS编写一份报告。该数据集填充有MS SQL Server的SQL查询。它使用Union All查询几个相似的表。问题是有一些信息丢失。不同的表适用于不同的工作站点,但是这些表中的任何列都没有站点名称。标识站点的唯一方法是通过表名。在“全部合并”的结果的合并列中,无法分辨出哪些行来自哪个站点。 有没有一种方法可以更改我的查询以在结果中添加一列,该列将具有与每一行相关联的工作

  • 我有一个名为的现有表。在这个表中,我有5列: persionId 人名 PMid 描述 Pamt 创建此表时,我将和设置为主键。 我现在想在主键中再包含一列——PMID。我如何编写一个语句来做到这一点?(表中已经有1000条记录了)