有两张表:
CREATE TABLE A(
AID INTEGER,

CONSTRAINT  A_aid_pk PRIMARY KEY(AID)
);CREATE TABLE B(
BID INTEGER,
AID INTEGER,

CONSTRAINT  B_bid_pk PRIMARY KEY(BID)
FOREIGN KEY (AID) REFERENCES A(AID);
);对于A里的每一条记录a,计算有多少条其他记录包含这个a。
因为一个A会对应多个B,所以“包含”指的是:如果A有两条记录,a0对应的是b0,b1,b2,b3。a1对应b0,b2。那a0就是包含a1的。最后输出的时候希望得到这样的结果:
aid           number_of_A
--------------
a0            0
a1            1这样的sql应该怎么写啊,谢谢

解决方案 »

  1.   

    前面的写错了,不好意思,我重新表述:有两张表:  
    CREATE  TABLE  A(  
               AID  INTEGER,  
               。  
               CONSTRAINT    A_aid_pk  PRIMARY  KEY(AID)  
    );  
     
    CREATE  TABLE  B(  
               BID  INTEGER,  
               AID  INTEGER,
               BNAME VARCHAR(20), 
               。  
               CONSTRAINT    B_bid_pk  PRIMARY  KEY(BID)  
               FOREIGN  KEY  (AID)  REFERENCES  A(AID);  
    );  
     
    对于A里的每一条记录a,计算有多少条其他记录包含这个a。  举例来说:
    表A
    AID
    ---------------------------
    0
    1表BBID                  AID            BNAME
    ------------ ------------- -----------------
    0                      0            foo
    1                      0            bar
    2                      0            fooo
    3                      0            barr
    4                      1            bar
    5                      1            barr
    这里记录a0对应4条记录b0,b1,b2,b3,BNAME分别是foo,bar,fooo,barr。
    记录a1对应2条记录b4,b5,BNAME分别是bar,barr。
    这样记录a1的BNAME的集合是a0的BNAME集合的子集,所以a1被a0包含。最后输出的时候希望得到这样的结果:  
    AID                  number_of_A  
    --------------
    0                        0  
    1                        1  a0为0因为没有别的记录包含它,a1为1因为a1被a0包含。这样的sql应该怎么写啊,谢谢p.s.如果还是看不明白,请指出哪里不清楚,谢谢:)
      

  2.   

    select a.aid,count(*) from a,b where b.aid(+)=a.aid group by a.aid
      

  3.   

    SQL> select * from a;AID
    ----------
    0
    1
    2
    3SQL> select * from b;       BID        AID BNAME
    ---------- ---------- --------------------
             4          1 bar
             5          1 barr
             6          2 foo
             7          2 er
             8          3 barr
             0          0 foo
             1          0 bar
             2          0 fooo
             3          0 barr9 rows selectedSQL> 
    SQL> SELECT aid,
      2         (SELECT COUNT(COUNT(*))
      3          FROM   b b1, b b2
      4          WHERE  b1.aid(+) = a.aid
      5          AND    b2.aid <> a.aid
      6          AND    b1.bname(+) = b2.bname HAVING COUNT(b1.aid) = COUNT(b2.aid)
      7          GROUP  BY b2.aid) cnt
      8  FROM   a
      9  /AID               CNT
    ---------- ----------
    0                   2
    1                   1
    2                   0
    3                   0SQL>