SQL多个表联合查询优化的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL多个表联合查询优化的问题相关的知识,希望对你有一定的参考价值。

请问 我有一个表和4个子表 要联合查询。放在一个GRID里面 一般查询是
select 成绩表.ID,姓名表.学生姓名,班级表.班级名,成绩表.语文,成绩表.数学,教师表.老师姓名 from
(1) 成绩表,姓名表,班级表,教师表 where 成绩表.学生ID =姓名表.学生ID and 成绩表.班级ID=班级表.ID and 成绩表.教师ID=教师表.ID
(2) 成绩表 left join 姓名表 on 成绩表.学生ID =姓名表.学生ID left join 班级表 on 成绩表.班级ID=班级表.ID left join 教师表 on 成绩表.教师ID=教师表.ID
有这2种方法来查数据我的本意是做数据库分页 而且由于条件比较多 所以我选择了视图在处理方式。从上面的代码来看(2)的效率会比(1)高。可是视图要是有索引则不允许有left join 方式。
所以有点2难。是放弃视图索引 还是选择(1)方法。如果选择了索引那 (1)和(2)的查询速度差别很大吗。。在记录数比较庞大的时候。。。
这样做好视图我就可以直接在存储过程采用分页方法来实现海量数据的快速查询了。。

参考技术A 你为何不考虑存储过程呢。如果你的数据是一些不怎么改变的你就用视图这样效率高。追问

本身设计就是分页的存储过程 存储过程里面 要查询如上的表 但是表结构复杂 所以就打算用视图先做 然后在存储过程里面直接用这个视图进行条件筛选 。。。

追答

就这样做吧,效率不索引高的。

MS Access SQL 查询 - 将所有表与多个表联合 - 重复字段

【中文标题】MS Access SQL 查询 - 将所有表与多个表联合 - 重复字段【英文标题】:MSAccess SQL Query - Union all with multiple tables - Duplicate field 【发布时间】:2019-03-26 10:19:16 【问题描述】:

我正在尝试从三个查询中获取总数 qryBOMqryLabourqryLaser 并将它们列在一行上。

我创建了一个qryTotals 过滤器,这是我的代码:

SELECT
  Sum(tempTotalLabour) AS TotalLabour,
  Sum(tempTotalCost) AS TotalCost,
  Sum(tempTotalLaser) AS TotalLaser,
  [TotalLabour] + [TotalCost] + [TotalLaser] AS ProductCost

FROM
      (

    SELECT
      Sum([qryLabour].[Labour Mins]) AS tempTotalLabour,
      Sum([qryLabour].[$ Cost]) AS tempTotalCost,
      Sum([qryLabour].[Laser Mins]) AS tempTotalLabour
    FROM
      qryLabour

    union all

    SELECT
      Sum([qryBOM].[Labour Mins]) AS tempTotalLabour,
      Sum([qryBOM].[$ Cost]) AS tempTotalCost,
      Sum([qryBOM].[Laser Mins]) AS tempTotaMaterial
    FROM
      qryBOM

    union all

    SELECT
      Sum([qryLaser].[Labour Mins]) AS tempTotalLabour,
      Sum([qryLaser].[$ Cost]) AS tempTotalCost,
      Sum([qryLaser].[Laser Mins]) AS tempTotalLaser
    FROM
      qryLaser

  ) AS TotalTable;

但我收到了错误 Duplicate Output Alias - 'tempTotalLabour'。请有人帮我解决我哪里出错了,这样我就可以解决这个问题并为将来学习。

干杯 克里斯

【问题讨论】:

这不可能是您正在运行以获取该错误消息的 SQL。该错误指的是tempLabourOutput,它在您的查询中不存在。请包含生成实际错误消息的实际查询。 对不起,我打错了。应该是tempTotalLabour 你必须学会​​校对代码。除了明显的拼写错误和拼写错误之外,这里没有任何问题。 抱歉,我使用的是 Access Query Editor,它都在一行上,我只以上述方式格式化,以便 Stack 用户更容易阅读 - 我应该尽可能地检查一下现在发现问题 【参考方案1】:

你使用了两次tempTotalLabour,我像下面这样单次尝试

SELECT
  Sum(tempTotalLabour) AS TotalLabour,
  Sum(tempTotalCost) AS TotalCost,
  Sum(tempTotalLaser) AS TotalLaser,
 Sum(tempTotalLabour) + Sum(tempTotalCost) + Sum(tempTotalLaser) AS ProductCost

FROM
      (

    SELECT
      Sum([qryLabour].[Labour Mins]) AS tempTotalLabour,
      Sum([qryLabour].[$ Cost]) AS tempTotalCost,
      Sum([qryLabour].[Laser Mins]) as tempTotalLaser

    FROM
      qryLabour

    union all

    SELECT
      Sum([qryBOM].[Labour Mins]) AS tempTotalLabour,
      Sum([qryBOM].[$ Cost]) AS tempTotalCost,
      Sum([qryBOM].[Laser Mins]) AS tempTotalLaser
    FROM
      qryBOM

    union all

    SELECT
      Sum([qryLaser].[Labour Mins]) AS tempTotalLabour,
      Sum([qryLaser].[$ Cost]) AS tempTotalCost,
      Sum([qryLaser].[Laser Mins]) AS tempTotalLaser
    FROM
      qryLaser

  ) AS TotalTable;

【讨论】:

以上是关于SQL多个表联合查询优化的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用多个联合优化查询性能

sql查询与优化3.操作多个表

mysql 联合模糊查询问题?

MySQL 通过使用连接查询来优化联合查询

ASP ACCESS 多表联合查询问题

mysql多条件查询的优化