2

我有一个像这样的查询:

SELECT
    id
FROM
    table1
INNER JOIN
    ...
WHERE
    ...
    AND eventtype IN (2000120, 2000121, 2000122, 2000123, 2000130)

EXCEPT

SELECT
    id
FROM
    table1
INNER JOIN
    ...
WHERE
    ...
    AND eventtype IN (2000123,2000130,2000134,2000135)

请注意,除了最后一个 where 子句之外,查询都是相同的。

我现在想计算上述查询返回的记录数。

如何?

非常感谢

4

3 回答 3

4

使用COUNT并将其包裹在一个SUBQUERY

SELECT COUNT(ID)
FROM (
        SELECT id
        FROM table1
        INNER JOIN...
        WHERE...
                AND eventtype IN ( 2000120, 2000121, 2000122, 2000123, 2000130 )
        EXCEPT
        SELECT id
        FROM table1
        INNER JOIN...
        WHERE...
                AND eventtype IN ( 2000123, 2000130, 2000134, 2000135 )
        ) s
于 2013-02-08T15:29:45.280 回答
1

您只需要第一次查询您想要的内容,如果您不需要它,则不必包含 2000130 值,因此您不想在查询中显示其他值。

SELECT
    id
FROM
    table1
INNER JOIN
    ...
WHERE
    ...
    AND eventtype IN (2000120, 2000121, 2000122, 2000123)

如果您需要从某些查询中排除某些值,您可以使用

    AND eventtype NOT IN (2000130)

但不是两者兼而有之。如果需要,可以只计算常规使用SELECT COUNT(id)或子查询。

于 2013-02-08T16:03:03.667 回答
0

您也可以将 EXISTS 与 INTERSECT 子查询一起使用

SELECT COUNT(ID)
FROM table1 t1 INNER JOIN ...
WHERE ... AND eventtype IN (2000120, 2000121, 2000122, 2000123, 2000130)
AND NOT EXISTS (
SELECT 1
FROM table1 t2 INNER JOIN ...
WHERE ... AND eventtype IN (2000123, 2000130, 2000134, 2000135)
AND EXISTS (SELECT t1.ID 
            INTERSECT
            SELECT t2.ID))  
于 2013-02-08T15:55:24.730 回答