COUNT()和SELECT在更复杂的查询中

时间:2011-09-12 15:59:22

标签: mysql select count

我目前正在使用以下查询(确实简化):

SELECT
    (
     SELECT COUNT(id)
     FROM bla_1
     WHERE id NOT IN (SELECT id FROM blahhh)
    )
+
    (
     SELECT COUNT(id)
     FROM bla_2
     WHERE id NOT IN (SELECT id FROM blahhh)
    )
as count

在有人提到它之前,我可以添加bla_1bla_2不包含相同的数据,即使使用简化的查询也是如此。

这里的问题是第二个查询计算的某些ID已由第一个查询处理。换句话说,第二个查询可以返回' 2'并且第一个查询已经计算了这两个计数行中的一个。

因此,由于两个查询都有一些共同的ID,我不想计算两次,我想出了:

SELECT
    (
     SELECT COUNT(id)
     FROM bla_1
     WHERE id NOT IN (SELECT id FROM blahhh)
    )
+
    (
     SELECT COUNT(id)
     FROM bla_2
     WHERE id NOT IN (SELECT id FROM blahhh)
     AND id NOT IN (SELECT id
                    FROM bla_1
                    WHERE id NOT IN (SELECT id FROM blahhh)
                    )
    )
as count

您会注意到第二个查询中的第二个子查询与第一个查询完全相同。

我的问题是,我无法在不执行相同查询两次的情况下完成此工作(第一次计算结果,第二次实际检索结果)。

非常喜欢解决这个问题的人: - )

1 个答案:

答案 0 :(得分:3)

尝试使用UNION操作来消除重复操作。

SELECT COUNT(ID) AS MyCount
FROM 
(  SELECT ID FROM Table1 WHERE /*....*/
   UNION 
   SELECT ID FROM Table2 WHERE /*....*/
) r