SQL WHERE字段列表中的子查询

时间:2015-06-02 12:11:17

标签: sql subquery fieldlist

我的查询如下:

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

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

有什么想法吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分: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