有两张表:
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应该怎么写啊,谢谢
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应该怎么写啊,谢谢
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.如果还是看不明白,请指出哪里不清楚,谢谢:)
----------
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>