首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Microsoft Access中的多表查询

Microsoft Access中的多表查询
EN

Stack Overflow用户
提问于 2013-10-12 11:38:02
回答 1查看 268关注 0票数 0

我有四张桌子。

代码语言:javascript
运行
复制
Invoices (Date, JobNumber)
PO1 (Cost, JobNumber)
PO2 (Cost, JobNumber)
PO3 (Cost, JobNumber)

它们都有一个名为JobNumber的连接列。我已经对两个日期之间的发票进行了查询,以创建一个JobNumbers表。

代码语言:javascript
运行
复制
SELECT JobNumber FROM Invoices WHERE (Date > "startDate") AND (Date < "endDate") INTO tempTable;

我更习惯于使用PHP和mySQL,使用临时表和多行SQL,接下来的步骤非常简单。但是Access查询设计器不允许这样的事情。因此,我不知道如何在Access中设计跨4个表的查询。我现在想为PO1到PO3做些什么:

代码语言:javascript
运行
复制
SELECT SUM(PO1.Price) AS TotalPrice FROM P01,tempTable WHERE PO1.JobNumber=tempTable.JobNumber; 

然后返回该JobNumber的所有成本之和。任何指示都欢迎。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-12 12:20:27

SQL已经构建了连接的方式,在这种情况下,您不需要使用临时表。如果进入设计查询,然后选择SQL视图,下面的查询将在PO1、PO2和PO3上生成总计。

代码语言:javascript
运行
复制
Select
    i.JobNumber,
    Sum(c.Cost) as TotalCost
From
    Invoices as i
        Left Outer Join (
            Select
                Cost,
                JobNumber
            From
                PO1
            Union All
            Select
                Cost,
                JobNumber
            From
                PO2
            Union All
            Select
                Cost,
                JobNumber
            From
                PO3
        ) as c
        On i.JobNumber = c.jobNumber
Where
    i.Date >= #StartDate# And
    i.Date < #EndDate#
Group By
    i.JobNumber

这里有很多活动部件。要理解它,首先要做的是为内部select创建一个单独的查询。因此,创建一个名为AllPO的查询,定义如下:

代码语言:javascript
运行
复制
Select
    Cost,
    JobNumber
From
    PO1
Union All
Select
    Cost,
    JobNumber
From
    PO2
Union All
Select
    Cost,
    JobNumber
From
    PO3

然后,可以将第一个查询重新定义为

代码语言:javascript
运行
复制
Select
    i.JobNumber,
    Sum(c.Cost) as TotalCost
From
    Invoices as i
        Left Outer Join
    AllPO as c
        On i.JobNumber = c.jobNumber
Where
    i.Date >= #StartDate# And
    i.Date < #EndDate#
Group By
    i.JobNumber

这有点像使用临时表,但查询优化器可以自由使用更高效的技术(如果可以找到的话)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19333738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档