【问题标题】:MS Access SQL that shows full list even if other list does not include显示完整列表的 MS Access SQL,即使其他列表不包括在内
【发布时间】:2015-02-22 19:46:25
【问题描述】:

我正在尝试编写一个查询,该查询创建一个列表,显示某一天库存中每个项目的剩余量。

我有以下表格:

tbl类型

 - Types

tbl 房间

 - Room
 - Type

tbl日期

 - Date
 - Type

我有以下疑问:

--qryRoomInventory--
SELECT 
    tblTypes.Type, Count(tblRooms.Type) AS Inventory
FROM 
    tblTypes 
INNER JOIN 
    tblRooms ON tblTypes.Type = tblRooms.Type
GROUP BY 
    tblTypes.Type;

--qryBooked--
SELECT 
    tblDates.Type, tblDates.Date, Count(tblDates.Type) AS Booked, 
    [Inventory]-[Booked] AS Opened
FROM 
    (tblTypes 
INNER JOIN 
    tblDates ON tblTypes.Type = tblDates.Type) 
INNER JOIN 
    qryRoomInventory ON tblTypes.Type = qryRoomInventory.Type
GROUP BY 
    tblDates.Type, tblDates.Date, qryRoomInventory.Inventory
HAVING 
    (((tblDates.Date) = Date()));

问题在于它只显示了tblDates 中的类型,但删除了其余的类型。如何让它显示整个类型列表,如果它不在列表中,则假设有 0 个预订?

【问题讨论】:

    标签: sql ms-access filtering


    【解决方案1】:

    您为此使用LEFT JOIN。例如,您的第一个查询是:

    SELECT tblTypes.Type, Count(tblRooms.Type) AS Inventory
    FROM tblTypes LEFT JOIN
         tblRooms
         ON tblTypes.Type = tblRooms.Type
    GROUP BY tblTypes.Type;
    

    如果您有多个INNER JOINs(例如第二个查询),则应将它们全部替换为LEFT JOIN

    【讨论】:

    • LEFT JOIN 修复了它。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 2013-02-23
    相关资源
    最近更新 更多