SQL WHERE 字段列表中的子查询

SQL WHERE Subquery in Field List

我有这样的查询:

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

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

有什么想法吗?

如果你使用 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

使用相关的子选择来统计。总结在派生的 table:

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

你只需要使用 Derived Table:

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