0

我有一个相当简单的查询:

我有三个表,我想返回每个表使用的行数(具有外键)。

这是我的第一次尝试:

    SELECT 
        COUNT(at.code) AS atcount, 
        COUNT(de.code) AS decount, 
        COUNT(ch.code) AS chcount 
    FROM 
        table_at at, 
        table_ch ch, 
        table_de de 
    WHERE 
        at.teilnehmerid != 0
    AND
        de.teilnehmerid != 0
    AND
        ch.teilnehmerid != 0

但这不知何故不起作用,它不会产生任何错误,但只是不考虑条件。我还考虑过子查询,例如:

    SELECT 
        (SELECT COUNT(code) FROM table_at at WHERE at.teilnehmerid != 0), 
        (SELECT COUNT(code) FROM table_de de WHERE de.teilnehmerid != 0), 
        (SELECT COUNT(code) FROM table_ch ch WHERE ch.teilnehmerid != 0)

但是我对这种尝试相当愚蠢的事情感到困惑……那FROM呢?当然我得到一个错误:Operand should contain 1 column(s)- 但我只想要计数......

我还阅读了有关 Joins 的信息,但不明白如何在我的主要语句中获取COUNTvia a 。JOINSELECT

是的,我在这里阅读了其他一些问题,但没有看到适用于这两个问题的答案:

  • 选择多个表

  • COUNT在多张桌子上做

如果我错了,只是没有得到正确的答案,也许更好的解释会有所帮助。

4

3 回答 3

1

COUNT (x)非常不同COUNT(DISTINCT x)。前者计算所有具有多重性的值,后者仅计算不同的值。也许后者是您想要使用的。

于 2012-10-17T11:02:27.003 回答
1

您可能能够连接表以获得结果,但是如果看不到表结构以及它们之间的关系是很困难的。

您可以使用以下方式获得结果UNION ALL

select count(code) CodeCount, 'atcount' col
from table_at
where teilnehmerid != 0
union all
select count(code) CodeCount, 'chcount' col
from table_ch
where teilnehmerid != 0
union all
select count(code) CodeCount, 'decount' col
from table_de
where teilnehmerid != 0

这将为您提供单列中的值,然后如果您希望它们连续出现,您可以使用以下内容:

select 
    max(case when x.col = 'atcount' then x.codecount else 0 end) atcount,
    max(case when x.col = 'chcount' then x.codecount else 0 end) chcount,
    max(case when x.col = 'decount' then x.codecount else 0 end) decount
from 
(
    select count(code) CodeCount, 'atcount' col
    from table_at
    where teilnehmerid != 0
    union all
    select count(code) CodeCount, 'chcount' col
    from table_ch
    where teilnehmerid != 0
    union all
    select count(code) CodeCount, 'decount' col
    from table_de
    where teilnehmerid != 0
) x
于 2012-10-17T11:03:00.170 回答
1

由于COUNT()返回单行单列;怎么样,

SELECT * 
FROM
(SELECT COUNT(code) FROM table_at at WHERE teilnehmerid != 0) as T1, 
(SELECT COUNT(code) FROM table_de de WHERE teilnehmerid != 0) as T2, 
(SELECT COUNT(code) FROM table_ch ch WHERE teilnehmerid != 0) as T3

连接将返回一行的位置。

于 2012-10-17T11:11:28.717 回答