我有2个如下表,我需要来自客户端表的client_ID和来自角色表的“角色”,但是获取表中数据的条件是,客户端具有一个以上的creation_type。
请找到下面的示例表和输出。
客户表
Client_ID cname Contribution_type
-------------------------------------
1 A Regular
2 B public
3 C regular
4 D private
1 A public
4 D similar
角色表
Client_ID Rname
------------------
1 owner
2 owner
3 trustee
4 benificier
1 trustee
2 benificier
3 owner
4 owner
输出
Client_ID Rname
-------------------
1 owner
1 trustee
4 beneficiary
4 owner
我编写了以下查询,但收到以下错误
select
c.cid, r.rname
from
Client_table c
join
role_table r on c.cid = r.CID
where
c.cid in (select cl.CID, count(Contribution_type)
from Client_table c
group by cl.CID
having count(Contribution_type) > 1);
错误消息:
ORA-00913:值太多
00913. 00000-“值太多”
*原因:
*动作:
在第21行的错误:第9列
谢谢。
答案 0 :(得分:1)
尝试在您的count(Contribution_type)
子查询中删除where
。因为In只能比较一列。
select c.cid,r.rname
from Client_table c
join role_table r on c.cid = r.CID
where c.cid in (select cl.CID from Client_table c group by cl.CID having count(Contribution_type)>1);
或者您可以只在from
中而不是在where
中编写子查询。
select c.cid,r.rname
from (
select cl.CID
from Client_table c
group by cl.CID
having count(c.Contribution_type)>1
) c
join role_table r on c.cid = r.CID
答案 1 :(得分:1)
这将为您完成。
假设在同一contribution type
出现多次的情况下,您只想要一个实例,则使用count (distinct contribution_type)
,否则仅使用count(contribution_type)
select * from role r
where r.client_id in
(select client_id from client c
group by client_id
having count(distinct contribution_type)>1
)
发生错误的原因是,在您的IN
子句中,您仅提及1个值,但是您要从子查询中获取多个1个值,因此出错。
答案 2 :(得分:0)
select c.cid,r.rname from Client_table c join role_table r on c.cid = r.CID
where c.cid in (select cl.CID from Client_table c group by cl.CID having count(Contribution_type)>1);
在子查询中删除 count(Contribution_type)。
答案 3 :(得分:0)
它将完成:
select distinct client_id,rname from role_table where client_id in(1,4) order by client_id;
答案 4 :(得分:0)
您的问题是子查询返回多个列。但是,您还可以简化外部查询:
select r.cid, r.rname
from role_table r
where r.cid in (select c.CID -- only one column here
from Client_table c
group by c.CID
having count(c.Contribution_type) > 1
);
换句话说,您不需要加入Client_table
,因为您拥有role_table
中所有需要的字段。