SELECT PERSONALINFO.FN,
PERSONALINFO.SN
FROM PERSONALINFO
JOIN BOOKING ON BOOKED.EMAIL = PERSONALINFO.EMAIL
HAVING COUNT(BOOKEDE.EMAIL) > 2
我正在使用sqldeveloper来计算电子邮件在预订数据库中出现的次数,如果电子邮件出现的次数超过两次,它将从personalinfo数据库获取个人信息并显示,但我只能'似乎让它工作,我很失落。
答案 0 :(得分:1)
使用聚合函数时,需要GROUP BY
子句
SELECT PERSONALINFO.FIRSTNAME,
PERSONALINFO.SECONDNAME
FROM PERSONALINFO
JOIN BOOKING ON BOOKING.EMAIL = PERSONALINFO.EMAIL
GROUP BY PERSONALINFO.FIRSTNAME, PERSONALINFO.SECONDNAME
HAVING COUNT(BOOKING.EMAIL) > 2
答案 1 :(得分:0)
SELECT PL.FIRSTNAME, PL.SECONDNAME, PL.EMAIL FROM PERSONALINFO PL
INNER JOIN BOOKING B ON B.EMAIL = PL.EMAIL
WHERE COUNT(B.EMAIL)>2 ;
答案 2 :(得分:0)
我认为这就是你想要的:
SELECT pi.FIRSTNAME ,
pi.SECONDNAME ,
pi.EMAIL
FROM (select email
from BOOKING b
group by email
having count(*) > 2
) b join
PERSONALINFO pi
ON b.EMAIL = pi.EMAIL;
您的初始查询有几个问题。有些是语法,例如在count()
子句中而不是在where
子句中具有having
函数。有些是合乎逻辑的,例如PERSONALINFO
中的重复电子邮件也会导致查询“匹配”,即使只有一个预订也是如此。
此版本通过首先聚合BOOKING
,提取感兴趣的电子邮件,然后加入另一个表来解决这些问题。
此外,我在查询中添加了表别名(pi
和b
)。这使查询更易于阅读和维护。