【发布时间】:2020-06-06 07:10:27
【问题描述】:
假设我们有clients 和providers。一个客户可以有多个供应商(如互联网、电话、电视等),我想找到有多个供应商的客户的名字。
create table clients
(
client_id char(8) not null,
client_name varchar(80) not null,
contract char(1) not null,
primary key (client_id)
)
create table client_provider
(
provider_id char(11) not null,
client_id char(8) not null,
primary key (provider_id, client_id),
foreign key (provder_id) references providers ON DELETE CASCADE,
foreign key (client_id) references clients ON DELETE CASCADE
);
因此,即使对providers一无所知,我们也可以通过以下关系代数了解拥有多个提供者的客户(刚开始学习,如有错误请指正):
π 客户端名称 (
[ σ client_provider2.provider_id ≠ client_provider.provider_id ∧ client_provider2.client_id = client_provider.client_id (ρ client_provider2 (client_provider) ⨯ client_provider))
⨝ 客户]
到目前为止我所尝试的(在第 1 行返回“不是 GROUP BY 表达式”):
SQL> select c.client_name
2 from clients c
3 inner join client_provider cp on c.client_id = cp.client_id
4 group by cp.client_id
5 having count(*) > 1;
【问题讨论】:
-
只需将您的
group by更改为c.client_name。