SQL查询计算特定类型的小部件缺少特定类型的事务

时间:2016-02-11 05:33:23

标签: sql ms-access-2010

我在MS Access 2010中构建SQL查询。业务问题是:

  

所有类型的小部件' A'应该有相应的检查   交易记录类型'内部'在检查表中。但是,一些' A'小部件还没有类型'内部'的检查交易记录。在检查中   表。编写一个SQL查询来计算类型' A'的小部件数量。   缺少内部'检验交易。

有三个表格:

  1. 小部件(主要小部件表)
  2. widget_info (包含多个小部件属性的表格,包括小部件类型)
  3. 检查(检查记录的交易表,其中可能包含每个小部件的多个检查记录......其中一个可能属于'内部')
  4. 查询应返回显示类型为' A'的小部件数量。在widget_info表中,并且在内部'类型的检查表中没有记录。请注意,检查表可能包含每个窗口小部件的多个记录,这些记录不是“内部”类型的,即,我有一个“预先”的记录。检查记录或外部'检查记录。

    我最好的一点是:

    SELECT Count(widgets.*) AS count
    FROM (widgets 
    INNER JOIN widget_info 
        ON widget_info.widget_number = widgets.widget_number) 
    INNER JOIN inspections 
        ON inspections.widget_number = widgets.widget_number
    WHERE widget_info.type ='A' AND 
    NOT EXISTS (SELECT 1 FROM inspections WHERE inspections.type <> 'internal')
    

    当我执行查询时,我得到一个零计数,即使我知道有些小部件缺失&#39;内部&#39;检查。

    谢谢你的时间!

    鲍勃

1 个答案:

答案 0 :(得分:0)

确定此查询的问题是NOT EXISTS()函数的WHERE子句不包含与窗口小部件表和检查表之间的窗口小部件编号匹配的条件。我按如下方式修改了查询,但它确实有效。

SELECT Count(widgets.*) AS count
FROM (widgets 
INNER JOIN widget_info 
    ON widget_info.widget_number = widgets.widget_number) 
INNER JOIN inspections 
    ON inspections.widget_number = widgets.widget_number
WHERE widget_info.type ='A' AND 
NOT EXISTS (SELECT 1 FROM inspections WHERE inspections.type <> 'internal'
    AND inspections.widget_number = widgets.widget_number);