1

我有这样的查询:

SELECT field
FROM table
WHERE
    (
        SELECT COUNT(*)
        FROM table2
        WHERE table2.field = table.field
    )
    !=
    (
        SELECT COUNT(*)
        FROM table3
        WHERE table3.field = table.field
    )

现在我想WHERE在我的字段列表中包含这些子查询,例如:

SELECT field, count1, count2
FROM table
WHERE
    (
        SELECT COUNT(*)
        FROM table2
        WHERE table2.field = table.field
    ) AS Count1
    !=
    (
        SELECT COUNT(*)
        FROM table3
        WHERE table3.field = table.field
    ) AS Count2

这可能吗?当然我可以将这些子查询放在字段列表中,但是我无法比较它们。

有任何想法吗?

4

3 回答 3

2

如果你使用,你可以这样做Sql Server

SELECT field, ca2.c2, ca3.c3
FROM table t
cross apply(SELECT COUNT(*) c2
            FROM table2 t2
            WHERE t2.field = t.field)ca2
cross apply(SELECT COUNT(*) c3
            FROM table3 t3
            WHERE t3.field = t.field)ca3
where ca2.c2 <> ca1.c1
于 2015-06-02T12:14:29.880 回答
0

使用相关的子选择来计数。总结在派生表中:

select dt.* from
(
SELECT field,
       (SELECT COUNT(*)
        FROM table2
        WHERE table2.field = table.field) as cnt1,
       (SELECT COUNT(*)
        FROM table3
        WHERE table3.field = table.field) as cnt2
FROM table
) dt
where dt.cnt1 <> dt.cnt2
于 2015-06-02T12:14:56.163 回答
0

您只需要使用派生表:

select *
from
 (
   SELECT field, 
    (
        SELECT COUNT(*)
        FROM table2
        WHERE table2.field = table.field
    ) AS Count1,
    (
        SELECT COUNT(*)
        FROM table3
        WHERE table3.field = table.field
    ) AS Count2
   FROM table
 ) dt
WHERE Count1 <> Count2
于 2015-06-02T12:15:24.717 回答