1
SELECT PERSONALINFO.FN, 
   PERSONALINFO.SN       
 FROM PERSONALINFO
 JOIN BOOKING ON BOOKED.EMAIL = PERSONALINFO.EMAIL        
 HAVING COUNT(BOOKEDE.EMAIL) > 2 

我正在使用 sqldeveloper 尝试计算预订数据库中出现电子邮件的次数,如果电子邮件出现两次以上,它将从个人信息数据库中获取个人信息并显示它,但我似乎无法让它工作吧,我是不是很迷茫。

4

3 回答 3

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 
于 2013-10-31T20:31:16.323 回答
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 ;
于 2013-10-31T20:29:57.097 回答
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()功能。有些是合乎逻辑的,例如重复的电子邮件也会导致查询“匹配”,即使只有一个预订。wherehavingPERSONALINFO

这个版本通过BOOKING首先聚合、提取感兴趣的电子邮件,然后加入另一个表来解决这些问题。

此外,我在查询中添加了表别名(piand b)。这使查询更易于阅读和维护。

于 2013-10-31T20:33:32.500 回答