4

我有两张桌子

甲和乙

 A                          B
-----------------         -----------------
a_pk (int)                b_pk (int)
a_name(varchar)           a_pk (int)
                          b_name (varchar) 

我可以写一个查询

SELECT a.a_name, b.b_name
FROM  a LEFT OUTER JOIN b ON a.a_pk = b.a_pk

这将返回给我一个不明确的列表,其中包含表 a 及其表 b 连接数据中的所有内容。将显示列 a 的重复项,其中不同的 b 记录共享一个共同的 a_pk 列值。

但我想要做的是从表 A 列 a_name 中获取完整的值列表,并添加一个列,该列是表 B 的连接值的 COUNT。

因此,如果 a_pk = 1 和 a_name = test 并且在表 b 中有 5 条记录的 a_pk 值为 1,我的结果集将是

a_name        b_count
------        -------
test           5
4

3 回答 3

11

查询应该是这样的:

SELECT 
    a.a_name, 
    (
        SELECT Count(b.b_pk) 
        FROM b 
        Where b.a_pk = a.a_pk
    ) as b_count 
FROM  a
于 2012-09-12T18:28:36.947 回答
4
SELECT a_name, COUNT(*) as 'b_count'
FROM 
    A a
    JOIN B b
    ON a.a_pk = b.a_pk
GROUP BY a_name
于 2012-09-12T18:27:50.867 回答
0
SELECT
    a.name,
    (
        SELECT COUNT(1)
        FROM B b
        WHERE b.a_pk = a.a_pk
    )
FROM A a
于 2012-09-12T18:29:05.850 回答