求一条外键记录数目查询语句;
例如:(其中B表的a_id是外键。。即A表的主键)  A表 : id  name         B表:id   a_id  content 
         1    类型1            1      1    内容1
         2    类型2            2      1    内容2
         3    类型3            3      2    内容3
                               4      3    内容4
                               5      3    内容5
                               6      3    内容6要查询结果为:
       id  name  count(就是这个count了,所拥有的外键记录条数)
        1  类型1   2
        2  类型2   1
        3  类型3   3望高手解决下。。顺便讲解下原理。。

解决方案 »

  1.   

    select A.* ,[count]=count(a_id) from A join B on A.id=B.a_id
    group by A.id,A.name
      

  2.   

    select ID,name,(select COUNT(*) from B where A.id=B.id group by A.id)
    from a
      

  3.   

    select ID,name,(select COUNT(*) from B where A.id=B.a_id group by A.id)
    from a
      

  4.   

    -- =========================================
    -- -----------t_mac 小编-------------
       ---希望有天成为大虾---- 
    -- =========================================IF OBJECT_ID('a') IS NOT NULL
      DROP TABLE a
    GO
    CREATE TABLE a(id int,name varchar(10))
    go
    insert into a
    select 1,'类型1' union all
    select 2,'类型2' union all
    select 3,'类型3' 
    go
    IF OBJECT_ID('b') IS NOT NULL
      DROP TABLE b
    GO
    CREATE TABLE b(id int,a_id int ,coount varchar(10))
    go
    insert into b
    select 1,1,'内容1' union all 
    select 2,1,'内容2' union all 
    select 3,2,'内容3' union all 
    select 4,3,'内容4' union all 
    select 5,3,'内容5' union all 
    select 6,3,'内容6' select ID,name,(select COUNT(*) from B where A.id=B.a_id group by B.a_id)
    from a
           /*------------
    ----------- ---------- -----------
    1           类型1        2
    2           类型2        1
    3           类型3        3(3 行受影响)
    -------*/
      

  5.   

    SELECT id,NAME,[count]=(SELECT COUNT(1) FROM B WHERE a_id=aa.id)
    FROM A aa
      

  6.   


    DECLARE @tb_A TABLE(ID INT, NAMES NVARCHAR(20))
    INSERT INTO @tb_A(id, NAMES)
    SELECT 1, '类型1' UNION ALL
    SELECT 2, '类型2' UNION ALL
    SELECT 3, '类型3' DECLARE @tb_B TABLE(id INT, a_id INT, CONTENTs NVARCHAR(20))
    INSERT INTO @tb_B(id, a_id, CONTENTs)
    SELECT 1, 1, '内容1' UNION ALL
    SELECT 2, 1, '内容2' UNION ALL
    SELECT 3, 2, '内容3' UNION ALL
    SELECT 4, 3, '内容4' UNION ALL
    SELECT 5, 3, '内容5' UNION ALL
    SELECT 6, 3, '内容6'SELECT A.id, A.NAMES, COUNT(a_ID)
    FROM @tb_A A INNER JOIN @tb_B B ON A.ID = B.a_id
    GROUP BY A.id, A.NAMES(3 row(s) affected)(6 row(s) affected)
    id          NAMES                
    ----------- -------------------- -----------
    1           类型1                  2
    2           类型2                  1
    3           类型3                  3(3 row(s) affected)
      

  7.   

    select a.id ,a.name,[count]=count(b.a_id) from a left join b 
    on a.id=b.a_id