oracle 加入和拥有-获取在合同表中多次出现的帐户

uurity8g  于 2023-05-22  发布在  Oracle
关注(0)|答案(1)|浏览(126)

我试图获取在合约表中出现多次的帐户,而不管它在c_map表中联接的次数。

CREATE TABLE cntrct (
  cntrct_id VARCHAR(10),
  account_id varchar(10)
);
CREATE TABLE c_map (
  cntrct_id VARCHAR(10)
);

INSERT INTO cntrct VALUES (1,'a');
insert into cntrct values (2,'b');
insert into cntrct values (3,'c');
insert into cntrct values (4,'b');

INSERT INTO c_map VALUES (1);
INSERT INTO c_map VALUES (1);
INSERT INTO c_map VALUES (1);
insert into c_map values (2);
insert into c_map values (2);
insert into c_map values (2);
insert into c_map values (3);
insert into c_map values (3);
insert into c_map values (3);
commit;

select ct.account_id
from cntrct ct, c_map cm
where ct.cntrct_id = cm.cntrct_id
group by ct.account_id
having count(ct.account_id)> 1

小提琴:http://sqlfiddle.com/#!4/cec1b7/4
我期待输出:

b

但我却得到了他们所有人。
如何限制它,使它在运行having count()>1时不考虑c_map表?

eeq64g8w

eeq64g8w1#

获取在合约表中出现多次的账户,而不管它在c_map表中联接的次数。
为什么要加入呢?您需要的信息在合同表中:

select account_id
from cntrct 
group by account_id
having count(*) > 1
  • 也许 * 你想过滤Map表中存在的合约id上的数据集。如果是这样,我推荐exists
select account_id
from cntrct c
where exists (select 1 from c_map m where m.cntrct_id = c.cntrct_id)
group by account_id
having count(*) > 1

相关问题