使用两个过滤器时,SQL查询不起作用

时间:2013-03-25 19:53:38

标签: php sql sql-server sql-server-2008

我正在开发一个SQL Query,它将在我的网站中实现,以便显示一个表格。此特定查询仅使用其计数的数字填充一个表格单元格。

目前,由于下面的最终INNER JOIN,在表5中找到的主键(column1)少于3次时,它只计算行数。到此为止,查询工作正常。

SELECT COUNT (a.column1) AS test
    FROM Table1 a
    INNER JOIN Table2 b ON […]
    INNER JOIN Table3 c ON […]
    INNER JOIN Table4 d ON […]
    INNER JOIN (SELECT column1 FROM Table 5 GROUP BY column1 HAVING COUNT (column1)<3) e ON e.column1=a.column1
    WHERE a.column2 IS NULL

问题是我还想计算Table5中没有出现的行(但是存在于Table1中)。目前,我使用此功能的唯一方法是添加以下代码

AND a.column1 NOT IN (SELECT f.column1 FROM Table5 f)

但是,它只适用于未包含最终INNER JOIN的情况,我无法使用这两个约束。基本上,总而言之,如果主键(column1)在表5中出现少于三次或者它只是不在table5中,我希望计算行数。

谢谢。

1 个答案:

答案 0 :(得分:2)

您需要执行LEFT JOIN并在<3上添加WHERE和不存在条件:

SELECT COUNT (a.column1) AS test
FROM Table1 a
INNER JOIN Table2 b 
    ON […]
INNER JOIN Table3 c 
    ON […]
INNER JOIN Table4 d 
    ON […]
LEFT JOIN ( SELECT column1 , COUNT(column1) N
            FROM Table5 
            GROUP BY column1) e 
    ON e.column1=a.column1
WHERE a.column2 IS NULL
AND (e.N<3 OR e.column1 IS NULL)