1

我正在开发一个 SQL 查询,该查询将在我的网站中实现以显示表格。这个特定的查询只会用它计数的数字填充一个表格单元格。

目前,由于下面的最终 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)在 table5 中出现的次数少于 3 次,或者它根本不在 table5 中,我希望对行进行计数。

谢谢你。

4

1 回答 1

2

您需要执行 aLEFT 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)
于 2013-03-25T19:59:50.983 回答