列出领养超过3只动物的领养者的名字

thigvfpy  于 2021-07-26  发布在  Java
关注(0)|答案(3)|浏览(241)

这些是动物的table

(ID: int, Name: varchar(15), PrevOwner: varchar(15), DateAdmitted: date, Type: varchar(15))

采用者

(SIN: int, Name: varchar(15), Address: varchar(15), OtherAnimals: int)

采用

(AnimalID: int, SIN: int, AdoptDate: date, chipNo: int)

我想列出领养超过3只动物的领养者的名字
此查询提供错误:

select distinct Name
   from Adopter, Adoption
   where Adoption.SIN = Adopter.SIN
   GROUP BY Adoption.SIN
   Having count(SIN) > 3;
111
qhhrdooz

qhhrdooz1#

你不应该那样加入。。。连接的语法已经有20多年的历史了。使用新语法
如果你想要名字,你必须按名字分组。
这样地:

select  Adoption.Name 
from Adopter
join Adoption on Adoption.SIN = Adopter.SIN
GROUP BY Adoption.Name 
Having count(*) > 3;
bt1cpqcv

bt1cpqcv2#

我在这个exmaple中也为您创建了一些测试数据。
sql小提琴
你需要的是分组 Name ```
select Name
from Adopter adtr
left join Adoption adtn
on adtr.SIN = adtn.SIN
group by Name
having count(adtn.SIN) > 3

编辑:
我刚注意到你也有 `having` 条款as `Having count(SIN) > 3;` . 自 `SIN` 两者都是一个领域 `Adopter` 以及 `Adoption` ,您可能会得到一个不明确的字段错误。必须声明该字段来自 `count()` ,如我的示例所示:

having count(adtn.SIN) > 3

你也不需要 `distinct` ,因为 `group by` 我会处理的。
7eumitmz

7eumitmz3#

您必须通知中表的名称 HAVING 因为“sin”一栏模棱两可
试试这个:

select distinct Adoption.Name from Adopter,Adoption
   where Adoption.SIN = Adopter.SIN
   GROUP BY Adoption.SIN
   Having count(Adoption.SIN) > 3;

相关问题