我正在开发一个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中,我希望计算行数。
谢谢。
答案 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)